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()
返回一个你的应用当前保存了的文件的数组。
相关推荐
总之,《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 Wear DataLayer中,数据的传输主要依赖于两个关键组件:`DataItem`和`MessageAPI`。`DataItem`用于存储结构化数据,而`MessageAPI`则用于发送轻量级的消息。下面将详细介绍这两个组件以及如何使用它们。 ...
"Demo_8.rar_DEMO_android data storage"这个压缩包文件显然提供了一个示例,展示了Android平台上如何处理数据存储以及可能涉及的网络操作。下面我们将详细探讨这些关键知识点。 **1. Android数据存储方式** 1. **...
用系统自带的文件应用拷贝或移动文件无法到storage/emulated/0/Android/data 目录
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。
3. **Data.dat**: 这个文件通常用于存储程序数据,可能包含了Android API的搜索索引或用户自定义的数据,方便快速查找和访问API信息。 4. **System.Data.SQLite.dll**: 这是一个.NET Framework下的SQLite数据库引擎...
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
为了了解数据库buffer管理器的工作原理,对数据库底层结构有进一步的了解,编写一个data storage manager和buffer manager。该试验涉及储存和缓冲管理器。缓冲技术,散列技术,文件储存结构,磁盘空间和缓冲模块的...
Android 框架 API 支持 NDEF(NFC Data Exchange Format)标准,用于在 NFC 标签和 Android 设备之间共享数据。 AndroidBeam™ 功能允许设备把一个 NDEF 消息推送到物理/硬件上相互监听的另一个设备上,这提供了比...
在.NET和C#开发环境中,Telerik Data Storage提供了丰富的API和强大的数据模型,使得开发者能够轻松地进行数据操作,如添加、删除、更新和查询。这些API通常与Telerik的其他HTML UI组件(如Grid、Chart等)无缝集成...
_storage_emulated_0_android_data_com.tencent.mm_MicroMsg_Download_摸鱼组-校园互助平台(1)(1).rp
- **权限申请**:在AndroidManifest.xml中添加`<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />`和`<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />`...
### Bigtable:结构化数据的分布式存储系统 #### 引言与重要性 Bigtable,中文译为“大表”,是Google开发的一款用于大规模结构化数据的分布式存储系统。其设计初衷是为了应对互联网时代海量数据的存储与管理需求...