Android preference:
在android中,最简单的持久化数据的办法是使用Preferences API,获取preference对象有三种方式,都是通过Activity对象的方法,获取的是android.content.SharedPreferences对象实例。
getPreferences():获取到作用域是本Activity的preference
public SharedPreferences getPreferences (int mode)
通过Activity对象获取,获取的是本Activity私有的Preference,保存在系统中的xml形式的文件的
名称为这个Activity的名字,因此一个Activity只能有一个,属于这个Activity。
此方法存储的数据只有本activity可以访问到。
getSharedPreferences():获取到作用域是本应用程序的preference
public SharedPreferences getSharedPreferences (String name, int mode)
通过Activity对象获取,但是属于整个应用程序,可以有多个,以第一参数的name为文件名保存在系统中。
此方法存储的数据本程序的所有activity都可以访问到。
示例:
以下示例让SharedPreferences保存用户选择的值:

涉及获取和保持preference值的代码在Actvity的onCreate方法代码中:
SharedPreferences实例是通过:
get方法获取对应键的值;
edit方法获取SharedPreferences.Editor对象
通过SharedPreferences.Editor的put方法写入键值对
保存需要commit方法
getDefaultSharedPreferences():每个应用有一个默认的偏好文件preferences.xml,使用getDefaultSharedPreferences获取
getDefaultSharedPreferences和getSharedPreferences区别:
自定义的一些偏好设置用getSharedPreferences来获取,例如定义一个loginpref.xml的偏好文件
使用
来获取或者更改
每个应用有一个默认的偏好文件preferences.xml,使用getDefaultSharedPreferences获取
-----------------------------------------------------------------------
数据库:
写一个类继承自SQLiteOpenHelper,在该类中有如下两个抽象方法,
SQLiteOpenHelper的子类必须实现这两个方法。
public abstract void onCreate(SQLiteDatabase db);
public abstract void onUpgrade(SQLiteDatabase db,intoldVersion,int newVersion);
SQLiteOpenHelper会自动检测数据库文件是否存在。如果存在,会打开这个数据库,在这种情况下就不会调用onCreate()方法。如果数据库文件不存在,SQLiteOpenHelper首先会创建一个数据库文件,然后打开这个数据库,最后调用onCreate()方法。因此,onCreate()方法一般用来在新创建的数据库中建立表、视图等数据库组建。也就是说oncreate()方法在数据库文件第一次创建时调用。
先看看SQLiteOpenHelper类的构造方法再解释onUpdate()方法何时会被调用。
public SQLiteOpenHelper(Context context,Stringname,CursorFactoryfactory,intversion);
其中name参数表示数据库文件名(不包括文件路径),SQLiteOpenHelper会根据这个文件名创建数据库文件。version表示数据库的版本号。如果当前传入的数据库版本号比上次创建或升级的版本号高,SQLiteOpenHelper就会调用onUpdate()方法。也就是说,当数据库第一次创建时会有一个初始的版本号。当需要对数据库中的表、视图等组建升级时可以增大版本号,再重新创建它们。
现在总结一下oncreate()和onUpgrade ()调用过程。
1.如果数据库文件不存在,SQLiteOpenHelper在自动创建数据库后会调用oncreate()方法,在该方法中一般需要创建表、视图等组件。在创建前数据库一般是空的,因此不需要先删除数据库中相关的组件。
2.如果数据库文件存在,并且当前版本号高于上次创建或升级的版本号,SQLiteOpenHelper会调用onUpdate()方法,调用该方法后会更新数据库的版本号。在onUpgrade ()方法中除了创建表、视图等组件外,还需要先删除这些相关的组件,因此,在调用onupdate()方法前,数据库是存在的,里面还原许多数据库组建。
综合上述两点,可以得出一个结论。如果数据库文件不存在,只有oncreate()被调用(该方法在创建数据库时被调用一次)。如果数据库文件存在,会调用onUpgrade ()方法升级数据库,并更新版本号。
调用SQLiteOpenHelper派生类对象的getWritableDatabase或getReadableDatabase
方法获得SQLiteDatabase 对象,然后使用SQLiteDatabase对象执行查询,插入等语句。
调用SQLiteOpenHelper派生类对象的close方法关闭数据库连接
也可以不用SQLiteOpenHelper,直接创建或打开数据库:
- SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
- db.execSQL(......)
本文详细介绍了Android中的数据存储方法,重点讲解了使用Preferences API进行简单数据持久化的技巧,包括getPreferences(), getSharedPreferences() 和 getDefaultSharedPreferences() 的应用场景及区别。同时,还介绍了如何利用SQLiteOpenHelper进行数据库操作。
1586

被折叠的 条评论
为什么被折叠?



