android 数据持久化总结

1、 通过Context.getSharedPreferences(String fileName,int mode)方法,可以打开一个xml文件,文件的位置在/data/data/package_name/shared_prefs/fileName.xml,如果不存在,则会自动创建。可以对该文件进行读写操作,在应用内的各组件之间共享数据。如果将mode设置为Context.MODE_WORLD_READ或者Context.MODE_WORLD_WRITE,则还可以被其他应用访问到。不过这不是android推荐的方式,要实现跨应用共享数据,推荐的方式是用ContentProvider实现 

2、如果要访问另一个应用创建的shared_prefs文件,需要满足2个条件,首先另一个应用要设置MODE_WORLD_READ或MODE_WORLD_WIRTE权限,并且要知道另一个应用的package_name,然后就可以通过Context.createPackageContext()方法,就可以得到另一个应用的context,然后context.getSharedPreferences()方法,就可以打开shared_prefs文件了。不过这种方法并不推荐

3、在罕见的情况下,如果既把shared_prefs的权限设置为MODE_PRIVATE,又希望某些其他的应用可以访问到,那么可以在manifest文件中配置android:user_id(好像是这个属性),让多个应用共享USER_ID。因为本质上shared_prefs文件是采用linux的权限控制的,MODE_PRIVATE类似于-rw-------,所以如果多个应用使用了同一个USER_ID,自然都对这个文件有访问权限了

4、除了比较方便的shared_prefs,也可以创建自定义文件,方法是Context.openFileOutput(),可以在/data/data/package_name/files/目录下创建指定的文件,除此以外,和上面提到的shared_prefs都一样。不过操作起来就复杂一些了。要读取用这种方式创建的文件,可以用Context.openFileInput()方法

5、此外,还可以在SD卡上操作文件,通过标准的java.io包内的API就可以。不过要注意的是,SD卡内采用的是FAT文件系统,所以不支持linux的文件读写权限控制,这点和shared_prefs与file不太一样。如果需要对文件进行读写权限控制,就不能采用写入SD卡的方式

6、也可以用android自带的SQLite数据库来做数据持久化,主要用到的类包括SQLiteOpenHelper和SQLiteDatabase。

SQLiteOpenHelper主要有onCreate()、onUpgrade()、getWritableDatabase()等方法。getWritableDatabase()方法返回的是SQLiteDatabase对象实例,如果数据库尚未创建,则会自动调用onCreate()方法来创建数据库,所以一些建表和数据初始化操作,应该放在onCreate()方法里

SQLiteDatabase这个类相当于JDBC中的Connection,也类似Hibernate中的Session,或者Spring中的HibernateTemplate。该对象已经对基本的数据库操作进行了封装。可以调用insert()、delete()、executeSQL()等方法,进行实际的数据库操作

开发的时候一般会对这2个类做一下包装,比如进行简单的封装,使SQLiteDatabase的查询方法不是返回原始的Cursor类(Cursor相当于JDBC中的ResultSet),而是返回业务对象等等

7、 android中要实现跨应用共享数据,规范的方式是使用ContentProvider,使其他应用可以得到某个应用对外提供的数据,而不需要知道这个应用的实现细节。系统自带的provider放在android.provider包下,比如通讯录等。如果需要的话,开发者也可以提供自己的ContentProvider,这部分内容下次再单独介绍

相关推荐