android应用程序数据持久化
2014-12-14 21:37
190 查看
所谓持久化是为了将数据保存起来,程序退出或者是手机关机以后,再次运行程序,能获取到上次运行的数据。目前数据持久化保存的方式有三种。1. 保存至文件。2. 使用google自带的SharedPreferences。3. 使用sqlite。1. 保存至文件
FileOutputStream fos = this.openFileOutput("data.txt", Context.MODE_PRIVATE);通过上下文就可以获取字节流。openFileOutput第一个参数不需要制定路径。它的路径为/data/data/<包名>/files。第二个参数,一般取值为MODE_PRIVATE。
FileInputStream fis = this.openFileInput("data.txt");通过上下文获取字节读取流。可以指定在/data/data/<包名>/files的文件。通过以上两步就可以实现数据的保存。一般情况这种方式用得很少。一些结构化的数据保存在普通文件中,操作起来还是不方便。2.通过SharedPreferences实现数据的保存使用SharedPreferences还是很常见的,一些配置信息通过它保存,操作起来很方便。a. 如何获取SharedPreferences对象呢?getSharedPreferences(文件名称,mode)通过上下文获取SharedPreferences对象,可以指定具体的文件名。getPreferences(mode) 通过上下文获取SharedPreferences对象,文件不可以指定,使用当前的activity名称作为具体名称。PreferenceManager.getDefaultSharedPreferences(context) 这种方式获取的SharedPreferences对象,是使用当前的包名作为具体的文件名称。b.如何保存数据?
Editor edit = sp.edit(); edit.putBoolean("boolean", false); edit.putFloat("float", 1f);
edit.putString("string", "string");
edit.commit();
</pre>sp提供对基本数据类型和set集合的保存操作。最后记得commit。<p></p><p>生成的文件格式为xml。路径为:/data/data/<包名>/shared_prefs/sp.xml。具体格式为:</p><p></p><pre name="code" class="html"><?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <float name="float" value="1.0" /> <boolean name="boolean" value="false" /> <string name="string">string</string> </map>c.如何获取呢?
sp.getBoolean("boolean", false);存储的是什么类型,就使用什么类型的方法进行获取。第一个参数为key,第二个参数是当没有获取对应key 的时候,就返回默认值。3.sqlite数据库google将开源的sqlite移植到android系统时,提供了很方便的API。不管使用者是不是SQL高手很能使用,非常人性化。一般我们在使用Sqlite之前,先自己写一个类继承SQLiteOpenHelper。下面介绍一下。
public class MyOpenHelper extends SQLiteOpenHelper { public MyOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }构造方法:第一个参数:上下文。第二个参数:数据库名称。第三个参数:一般使用系统默认的光标即可。第四个参数:数据库的版本,可用于数据库脚本的升级。onCreate方法:只有在数据库不存在时,第一个创建name为名称的数据库时,才会执行。一旦创建成功,以后都不会执行onCreate方法。onUpgrade方法:数据库版本号大于上个版本号时就会执行该方法,可用于升级。通过以下两个方法就能得到操作数据库的方法了。
helper.getReadableDatabase(); helper.getWritableDatabase();接下使用不用写具体的sql语句方式进行操作。insert
SQLiteDatabase db = helper.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put("name", "zhangsan"); db.insert("person", null, cv);update
SQLiteDatabase db = helper.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put("name", "aaa"); db.update("person", cv, "id=? or id = ?", new String[]{ "1","2" });delete
SQLiteDatabase db = helper.getWritableDatabase(); db.delete("person", "id=? or id=?", new String[]{ "1","2" });select
SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.query("person", new String[]{"name"}, "id > ?", new String[]{ "1" }, null, null, null); if (cursor.moveToFirst()){ do{ String name = cursor.getColumnName(0); System.out.println("name:" + name); <span style="white-space:pre"> </span> }while(cursor.moveToNext()); } cursor.close();查询相对比较复杂一些。返回的是一个光标,通过遍历光标获取数据。如果想通过sql数据进行操作的。是一下方法;执行增删改 db.execSQL(sql)执行查询 db.rawQuery(sql, selectionArgs)4. 关于升级的处理
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { <span style="white-space:pre"> </span>// 我在项目中脚本升级的处理办法为:
<span style="white-space:pre"> </span>// 在工程的assets目录下有一个script.xml文件,里边存储了从第一个版本至最新版本的差异脚本(各个版本之间的差异)
<span style="white-space:pre"> </span>// 在数据库升级时,根据最新的版本和app现有的版本进行逐个升级。如果当前最新的版本5.0,而用户app的版本为2.0,那么就需要
<span style="white-space:pre"> </span>// 读取script.xml中,3.0、4.0、5.0的差异脚本,再此方法执行,这样就解决了跨版本升级的问题,并且维护时,只需要维护当前最新版本
<span style="white-space:pre"> </span>// 和上一个版本之间的差异即可。脚本的维护量在减少。<span style="white-space:pre"> </span>
}关于数据的持久化保存总结到此为止吧。
相关文章推荐
- Android应用程序生命周期 - Lifecycle of an Android Application
- Android 应用程序的生命周期
- Android连载之:第二章第三节:利用其他的开发环境和工具开发Android应用程序
- Android 优秀应用程序
- Android应用程序模型:应用程序,任务,进程,线程
- Android应用程序开发教程 - 实现一个登录对话框
- Android 应用程序开发
- 什么组成了Android应用程序?
- Android应用程序怎么刷到手机上
- Android应用程序剖析(译)
- 开发Android应用程序
- 谷歌Android操作系统应用程序已超800个
- Android应用程序剖析
- 利用其他工具(非ADT)开发Android上的应用程序
- Android 入门开发指南之五—分析应用程序
- Android 应用程序的生命周期(译)
- Android 应用程序的生命周期
- 在Android1.5应用程序开发过程中使用JUnit
- android应用程序基础
- Android应用程序使用Google Map