Android存储数据的方式
1. 文件I/O
Android平台主要通过java.io.FileInputStream和java.io.FileOutputStream这两个类来实现对文件的读写,java.io.File类则用来构造一个具体指向某个文件或者文件夹的对象。
需要注意的是:每个应用程序所在的包都会有一个私有的存储数据的目录,只有属于这个包中的应用程序才有写入的权限,每个包中应用程序的私有数据目录位于 Android系统中的绝对路径/data/data/<package>/目录中,除了私有目录,应用程序还拥有/sdcard目录即 Android设备上的SD卡的写入权限。文件系统中其他的系统目录,第三方应用程序都是不可写的。
2. SQLite数据库
要创建或打开一个SQLite数据库,可以直接调用SQLiteDatabase的静态方法SQLiteDatabase openDatabase(String path,SQLiteDatabase.CursorFactory factory,int flags)
也可以调用openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)。因为创建SQLite数据库也就是在文件系统中创建一个SQLite数据库的文件,所以应用程序必须对创建数据库的目录必须有可写的权 限,负责会抛出SQLiteException异常。与创建或打开文件相似,我们同样可以通过Context对象调用SQLiteDatabase openOrCreateDatabase(String name,int mode,SQLiteDatabase.CursorFactory factory)直接在私有数据库目录(/data/data/<包名>/database/目录)中创建或打开一个名为name的数据库。 除了在文件系统中创建SQLite数据库,Android还支持SQLite内存数据库。在某些需要临时创建数据库,并且对操作速率相对要求较高的情况 下,SQLite内存数据库就发挥作用了,要再内存中创建一个数据库,需要调用SQLiteDatabase的静态方法SQLiteDatabase create(SQLiteDatabase.CursorFactory factory)就可以了。若创建成功会返回创建的SQLite内存数据库的对象,否则返回null。
在实际的应用程序编写中,为了更好的对SQlite数据的创建,打开,更改进行管理,往往会编写一个SQLiteOpenHelper的数据库辅助类来帮助我们创建和打开数据库。
利用SQLiteDatabase对象操作数据库,他除了提供execSQL()和rawQuery()这种直接对SQL语句解析的方法外,还针对insert,upate,delete,select等操作专门定义了相关的方法。
Cursor的使用:查询数据库均会把查询的结果包装在一个Cursor的子类对象中返回。
3. ContentProvider
当数据需要在应用程序之间共享时,我们就可以用ContentProvider为数据库定义一个URI。之后其他应用程序对数据进行查询或者修改时候,只需要从当前上下文对象获得一个ContentResolver传入相应的URI就可以了。
4. 使用Preferences存储应用程序数据
Preferences是一种轻量级的数据存储机制,他将一些简单的数据类型的数据,包括boolean类型,int类型,float类型,long类型 以及String类型的数据,以键值对的形式存储在应用程序的私有Preferences目录(/data/data/<包名> /shared_prefs/)中,这种Preferences机制广泛应用于存储应用程序中的配置信息。