Android为你提供了多个可选的方式来保存持久的应用数据。你可以基于特定的需求来选择解决方案,例如数据是否应该是你的应用私有的还是对其他应用(和用户)公开的以及你的数据需要多大的空间来储存。
你可选的数据储存方式如下:
Shared Preferences
共享偏好
以"键-值对"的形式储存私有的基础数据。
Internal Storage
内部存储器
储存私有数据到设备内存。
External Storage
外部存储器
储存公有数据到共享的外部储存器。
SQLite Databases
SQLite数据库
用一个私有的数据库储存结构化数据。
Network Connection
网络连接
通过你自己的服务器储存数据到网络。
Android为你提供了一个途径来暴露你私有数据给其他的应用程序 —— 通过一个
content provider
。一个content provider是一个可选组件,暴露你的应用程序数据的read/write接口,遵循任何可能引入的约定。更多关于content provider使用的信息,请查阅
Content Providers
文档
使用Shared Preferences (Using Shared Preferences)
SharedPreferences
类提供了一个通用的框架来允许你以"键-值对"的形式来储存和获取持久的基础数据。你可以使用
SharedPreferences
来保存任何基础数据:boolean, float, int, long和String。这些数据将存留横跨用户对话(即使你的应用程序被杀死了)。
User Preferences
Shared
preferences are not strictly for saving "user preferences," such as
what ringtone a user has chosen. If you're interested in creating user
preferences for your application, see
PreferenceActivity
,
which provides an Activity framework for you to create user
preferences, which will be automatically persisted (using shared
preferences).
要给你的应用获取一个
SharedPreference
对象,使用以下的两个函数之一:
写入数值:
1.调用edit()
函数来获得一个SharedPreferences.Editor
对象。
2.通过putBoolean()
、putString()
等函数来添加数值。
3.通过commit()
函数来提交和确认操作。
要读取数值,使用
SharedPreferences
中的
getBoolean()
、
getString()
等函数。
这里是一个例子,为一个计算器的按键静音模式保存了一个偏好:
public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
. . .
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);
}
@Override
protected void onStop() {
super.onStop();
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
// Commit the edits!
editor.commit();
}
}
使用内部存储器 (Using the Internal Storage)
你可以直接将文件保存到设备的内部存储器上。默认的,保存到内部存储器上的文件是对你的应用私有的并且其他应用无法访问它们(用户也不行)。当用户卸载你的应用,这些文件会被移除。
要创建和写入一个私有文件到内部存储器:
1.通过文件名和处理模式调用openFileOutput()
函数。返回的是一个FileOutputStream
对象。
2.使用write()
函数来写入文件。
3.使用close()
函数来关闭流。
For example:
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
MODE_PRIVATE
会创建文件并使它对你的应用私有。其他可用的模式有:
MODE_APPEND
、
MODE_WORLD_READABLE
和
MODE_WORLD_WRITEABLE
。
要从内部存储器中读取一个文件:
1.调用openFileInput()
函数并传递一个文件名来读取。返回的是一个FileInputStream
对象。
2.使用read()
函数读取文件中的字节。
3.然后使用close()
函数关闭流。
提示
:如果你希望在编译的时候保存一个静态的文件到你的应用中,将文件保存到你项目的res/raw/
目录下。你使用openRawResource()
函数可以打开它,传递一个R.raw.<filename>
资源ID。该函数返回一个你可以用来读取文件的InputStream
对象(但你无法改写原始文件)。
保存缓存文件 (Saving cache files)
如果你想缓存一些数据,而不是永久储存,你应该使用
getCacheDir()
来打开一个代表内部存储器中储存临时缓存文件的目录的
File
对象。
当设备的内部储存空间较低时,Android可能会删除这些缓存文件来取回空间。无论如何,你不应该依靠系统来为你清空这些文件。你应该始终自己来维护缓存文件并维持在一个合理的空间消耗,比如1MB。当用户卸载你的应用,这些文件会被移除。
其他有用的函数 (Other useful methods)
getFilesDir()
获取你的内部文件所储存的系统目录的绝对路径。
getDir()
在你的内部存储器空间中创建(或打开一个存在的)目录。
deleteFile()
删除一个保存在内部存储器上的文件。
fileList()
返回一个你的应用当前保存了的文件的数组。
相关推荐
但需要注意,自Android 6.0(API级别23)开始,需要动态请求WRITE_EXTERNAL_STORAGE权限。 SQLite数据库是Android提供的轻量级关系型数据库,适用于结构化的数据存储。通过`SQLiteOpenHelper`类创建和管理数据库,...
总之,《Data Storage Networking》是一本全面且深入的教材,它不仅覆盖了CompTIA Storage+考试的核心知识点,还扩展到了当前IT领域的前沿话题,为读者提供了在数据存储领域持续学习和发展的坚实基础。
这个"android-Data-storage-and-access.rar_InternalFileDemo_android_and"压缩包包含了一系列的示例代码,涵盖了多种Android数据存储方式,帮助开发者理解并掌握如何在Android设备上有效地管理数据。 1. **...
标题中的"_storage_emulated_0_android_data_com.tencent.mobileqq_Tencent_QQfile_recv_实训四.zip" 是一个Android设备上的文件路径,它包含了用户在腾讯QQ应用中接收的文件。这个路径提供了关于文件存储位置和来源...
在Android开发中,与WebAPI进行交互是常见的需求,例如获取服务器数据、发送用户信息等。本案例"Android请求WebAPI"将详细讲解如何在Android应用中实现...通过学习和实践,你可以更好地掌握Android与WebAPI的交互技术。
android-serialport-api Accessing serial ports for Android The current Android SDK does not provide any API for reading and writing to the Linux TTY serial ports. You may find such serial ports on ...
在Android Wear DataLayer中,数据的传输主要依赖于两个关键组件:`DataItem`和`MessageAPI`。`DataItem`用于存储结构化数据,而`MessageAPI`则用于发送轻量级的消息。下面将详细介绍这两个组件以及如何使用它们。 ...
这些示例旨在帮助开发者更好地理解和学习如何在实际应用中使用Android的新特性和API。下面将详细探讨其中的一些关键知识点。 1. **权限管理(Runtime Permissions)** 在Android 6.0中,权限管理有了重大变化,...
用系统自带的文件应用拷贝或移动文件无法到storage/emulated/0/Android/data 目录
3. **Data.dat**: 这个文件通常用于存储程序数据,可能包含了Android API的搜索索引或用户自定义的数据,方便快速查找和访问API信息。 4. **System.Data.SQLite.dll**: 这是一个.NET Framework下的SQLite数据库引擎...
Android API是Android操作系统的核心组成部分,它...通过阅读"android api.rar"中的文档,开发者可以学习如何使用这些API来开发功能丰富的Android应用,同时了解最佳实践和注意事项,确保应用能在不同设备上顺畅运行。
这份"Android API手册 语法大全"是开发者们不可或缺的参考资料,它详细介绍了Android操作系统中的各种API,涵盖了从基础到高级的各种功能,帮助开发者们理解并有效地利用这些API进行应用程序的开发。 Android API...
Spring Data MongoDB API。 Spring Data MongoDB 开发文档。
Explore how to get Core Data integrated into your application properly, and work with this flexible API to create convenience methods to improve your application's maintainability. Reduce your ...
_storage_emulated_0_android_data_com.tencent.mobileqq_Tencent_QQfile_recv_魅族游戏框架.apk.1
1. openFileOutput (String name, int mode) name:文件的名称,不能包含分隔符"/",如果文件不存在,Android会自动创建它。创建的文件保存在/data/data/<package_name>/files目录下。 mode:操作模式 2. ...
为了了解数据库buffer管理器的工作原理,对数据库底层结构有进一步的了解,编写一个data storage manager和buffer manager。该试验涉及储存和缓冲管理器。缓冲技术,散列技术,文件储存结构,磁盘空间和缓冲模块的...