搜索
您的当前位置:首页正文

Android保存数据的四种方法

来源:赴品旅游
Android保存数据的四种方法

Android平台上的应用软件所存储的数据或者文件是私有,仅仅可以通过它自身才可以访问其所包含的数据资源。 那么基于这样的限制,该如何在Android平台上实现不同程序间的数据共享呢?答案非常简单 – 应用Content Providers,这是建立在Android平台上用于定义统一的数据标准。Android提供了针对不同数据类型的Content Providers来满足各种需要。例如:Image、Audio、Video和通讯录信息类等。阅读下边的文档之前,最好先熟悉Content Providers的概念。 有了上边所提到Content Providers,接下来就要处理在共享文件过程中的存储环节了,这里有四种方法分别适用于不同情况的需求。它们都各自有相应的优缺点,所以当开发者决定选择应用哪种方法之前,先要考虑当前所操作的情况是否适合于所选择的方法。 有了上边所提到Content Providers,接下来就要处理在共享文件过程中的存储环节了,这里有四种方法分别适用于不同情况的需求。它们都各自有相应的优缺点,所以当开发者决定选择应用哪种方法之前,先要考虑当前所操作的情况是否适合于所选择的方法。 Preferences  Files

 Databases  Network

Preferences

从其保存数据的结构来分析,这是一个相对较轻量级的存储数据的方法。类似于我们常用的ini文件保存软件初始化设置,同样在Android平台常用于存储较简单的参数设置。例如,可以通过它保存上一次用户所作的修改或者自定义参数设定,当再次启动程序后依然保持原有的设置。通过

Context.getSharedPreferences()方法来读写数值,这个方法通过设置name来使得同一个程序内的其它模块共享数据。如果不需要与其它模块共享数据,可以使用Activity.getPreferences()方法保持数据私有。需要着重强调一点,无法直接在多个程序间共享Preferences数据(不包括使用Content Providers)。 可以先看个例子:

1. import android.app.Activity;

2. import android.content.SharedPreferences; 3.

4. public class Calc extends Activity 5. {

6. public static final String PREFS_NAME = \"MyPrefsFile\"; 7.

8. @Override

9. protected void onCreate(Bundle state){ 10. super.onCreate(state); 11. // Restore preferences 12. SharedPreferences settings =

getSharedPreferences(PREFS_NAME, 0);

13. boolean silent = settings.getBoolean(\"silentMode\", false);

14. setSilent(silent); 15. } 16.

17. @Override

18. protected void onStop(){ 19. super.onStop();

20. // Save user preferences. We need an Editor object to

21. // make changes. All objects are from android.context.Context

22. SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

23. SharedPreferences.Editor editor = settings.edit();

24. editor.putBoolean(\"silentMode\", mSilentMode); 25. // Don't forget to commit your edits!!! 26. editor.commit(); 27. 28. } 29.}

Files

从这是第二种方法,可以在设备本身的存储设备或者外接的存储设备中创建用于保存数据的文件。同样在默认的状态下,文件是不能在不同的程序间共享。 写文件:调用Context.openFileOutput()方法根据指定的路径和文件名来创建文件,这个方法会返回一个FileOutputStream对象。

读取文件:调用Context.openFileInput()方法通过制定的路径和文件名来返回一个标准的Java FileInputStream对象。

(注意:在其它程序中将无法应用相同的路径和文件名来操作文件) 另外编译程序之前,在res/raw/tempFile中建立一个static文件,这样可以在程序中通过Resources.openRawResource (R.raw.myDataFile)方法同样返回一个InputStream对象,直接读取文件内容。

Databases

在Android API中包括了应用SQLite databases的接口,每个程序所创建的数据库都是私有的,换句话说,程序间无法相互访问对方的数据库。 在程序中创建SQLiteDatabase对象,其中包含了大部分与database交互的方法,例如:读取数据或者管理当前数据。可以应用SQLiteDatabase和其subClassSQLiteOpenHelper的create()方法来创建新的数据库。 对于SQLite database而言,其强大和方便的功能为Android提供了强有力的存储功能。特别是存储一些复杂的数据结构,例如:Android特别为通讯录创建了特有的数据类型,其中包含了非常多的子集而且涵盖了大部分的数据类型 “First Name” “Last Name” “Phone Number”和“Photo”等。

Android可以通过Sqlite3 database tool来查看指定数据库中表的内容,直接运行SQL命令来快速便捷的直接操作SQLite database,参考 Examine databases (sqlite3)了解更多内容。

数据库在设备中保存的地址是 /data/data/package_name/databases

Network

通过网络来获取和保存数据资源,这个方法需要设备保持网络连接状态,所以相对存在一些限制。下面列出了两个用于相关操作的类:java.net.* 和android.net.*

因篇幅问题不能全部显示,请点此查看更多更全内容

Top