android存储之preference和SQLite

1.      android preference:

在android中,最简单的持久化数据的办法是使用Preferences API,获取preference对象有三种方式,都是通过Activity对象的方法,获取的是android.content.SharedPreferences对象实例。

a.       getPreferences():获取到作用域是本Activity的preference

public SharedPreferences getPreferences (int mode)

    通过Activity对象获取,获取的是本Activity私有的Preference,保存在系统中的xml形式的文件的名称为这个Activity的名字,因此一个Activity只能有一个,属于这个Activity。

    此方法存储的数据只有本activity可以访问到   

b.      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方法

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


d.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.getBoolean("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>



2.      数据库:

A.写一个类继承自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(Contextcontext,String name,CursorFactory factory,int version);

    其中name参数表示数据库文件名(不包括文件路径),SQLiteOpenHelper会根据这个文件名创建数据库文件。version表示数据库的版本号。如果当前传入的数据库版本号比上次创建或升级的版本号高,SQLiteOpenHelper就会调用onUpdate()方法。也就是说,当数据库第一次创建时会有一个初始的版本号。当需要对数据库中的表、视图等组建升级时可以增大版本号,再重新创建它们。现在总结一下oncreate()和onUpgrade ()调用过程。

    1.如果数据库文件不存在,SQLiteOpenHelper在自动创建数据库后会调用oncreate()方法,在该方法中一般需要创建表、视图等组件。在创建前数据库一般是空的,因此不需要先删除数据库中相关的组件。

    2.如果数据库文件存在,并且当前版本号高于上次创建或升级的版本号,SQLiteOpenHelper会调用onUpdate()方法,调用该方法后会更新数据库的版本号。在onUpgrade ()方法中除了创建表、视图等组件外,还需要先删除这些相关的组件,因此,在调用onupdate()方法前,数据库是存在的,里面还原许多数据库组建。

     综合上述两点,可以得出一个结论。如果数据库文件不存在,只有oncreate()被调用(该方法在创建数据库时被调用一次)。如果数据库文件存在,会调用onUpgrade ()方法升级数据库,并更新版本号。

B.调用SQLiteOpenHelper派生类对象的getWritableDatabase 或 getReadableDatabase方法获得SQLiteDatabase 对象,然后使用SQLiteDatabase对象执行查询,插入等语句

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


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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值