android存储之preference和SQLite

来源:互联网 发布:上海 游戏程序员招聘 编辑:程序博客网 时间:2024/06/05 08:34

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方法代码中:

    preferences =this.getSharedPreferences(“sms.service.easymorse.com”, 0);    isStart =preferences.getBoolean(“sms.service.is.start”, false);     RadioGroup radioGroup = (RadioGroup) this            .findViewById(R.id.radioGroup01);    if (isStart) {        radioGroup.check(R.id.radioButtonStart);    } else {         radioGroup.check(R.id.radioButtonStop);    }      radioGroup.setOnCheckedChangeListener(newOnCheckedChangeListener() {        @Override        public void onCheckedChanged(RadioGroupgroup, int checkedId) {            if (checkedId ==R.id.radioButtonStart) {                isStart = true;                Log.v(“sms.service”,“>>start service…”);            } else {                isStart = false;                Log.v(“sms.service”,“>>stop service…”);            }           preferences.edit().putBoolean(“sms.service.is.start”, isStart).commit();        }    });

SharedPreferences实例是通过:

     get方法获取对应键的值;

     edit方法获取SharedPreferences.Editor对象

     通过SharedPreferences.Editor的put方法写入键值对

     保存需要commit方法


    getDefaultSharedPreferences():每个应用有一个默认的偏好文件preferences.xml,使用getDefaultSharedPreferences获取


getDefaultSharedPreferences和getSharedPreferences区别:

   自定义的一些偏好设置用getSharedPreferences来获取,例如定义一个loginpref.xml的偏好文件


使用

SharedPreferences sharedPreferences = getSharedPreferences("loginpref", Context.MODE_PRIVATE);System.out.println("set_location = "+sharedPreferences.getBoolean("islogin", false));Editor editor =  sharedPreferences.edit();editor.putBoolean("islogin", false);editor.commit();

来获取或者更改


每个应用有一个默认的偏好文件preferences.xml,使用getDefaultSharedPreferences获取

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);System.out.println("set_location = "+preferences.getoolean("if_set_location", false));Editor editor = preferences.edit();editor.putBoolean("if_set_location", false);editor.commit();"if_set_location"可能对应的是CheckBoxPreference或者其它,但是通用get***来获取值<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">    <PreferenceCategory android:title="位置信息设置">     <CheckBoxPreference        android:key="set_location"        android:title="打开或关闭位置信息"        android:summary="更改您的位置设置,打开或者关闭位置共享"        android:defaultValue="true"     />     <Preference        android:key="set_sys_location"        android:title="系统位置功能设置"        android:summary="点击到系统设置页面打开或关闭GPS位置功能"     />        </PreferenceCategory> </PreferenceScreen>


-----------------------------------------------------------------------

数据库:

写一个类继承自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派生类对象的getWritableDatabasegetReadableDatabase

方法获得SQLiteDatabase 对象,然后使用SQLiteDatabase对象执行查询,插入等语句。

   调用SQLiteOpenHelper派生类对象的close方法关闭数据库连接


也可以不用SQLiteOpenHelper,直接创建或打开数据库:

  1.  SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);  
  2.  db.execSQL(......)



0 0
原创粉丝点击