Android数据的存储方式 SharePreferences

  除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。实现SharedPreferences存储的步骤如下:

  一、根据Context获取SharedPreferences对象

  二、利用edit()方法获取Editor对象。

  三、通过Editor对象存储key-value键值对数据。

  四、通过commit()方法提交数据。

  具体实现代码如下:

复制代码
 1 publicclass MainActivity extends Activity {
2
@Override
3 publicvoid
onCreate(Bundle savedInstanceState) {
4 super
.onCreate(savedInstanceState);
5
setContentView(R.layout.main);
6

7 //获取SharedPreferences对象

8 Context ctx = MainActivity.this;
9 SharedPreferences sp = ctx.getSharedPreferences("SP"
, MODE_PRIVATE);
10 //存入数据
11 Editor editor = sp.edit();
12 editor.putString("STRING_KEY", "string"
);
13 editor.putInt("INT_KEY", 0
);
14 editor.putBoolean("BOOLEAN_KEY", true
);
15
editor.commit();
16

17 //返回STRING_KEY的值

18 Log.d("SP", sp.getString("STRING_KEY", "none"));
19 //如果NOT_EXIST不存在,则返回值为"none"

20 Log.d("SP", sp.getString("NOT_EXIST", "none"));
21
}
22 }
复制代码

1、Context.getSharedPreferences(String name,int mode)来得到一个指定name的SharedPreferences实例

         name:是指文件名称,不需要加后缀.xml,系统会自动为我们添加上。一般这个文件存储在/data/data/<package name>/shared_prefs下(这个面试常问到)

        mode:是指定读写方式,其值有三种,分别为:

            Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写

            Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写

            Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读写。

2、PreferenceManager.getDefaultSharedPreferences(Context)来获取在同一个包名下的SharedPreferences实例

      context:为上下文对象


  这段代码执行过后,即在/data/data/com.test/shared_prefs目录下生成了一个SP.xml文件,一个应用可以创建多个这样的xml文件。如图所示: 

   SP.xml文件的具体内容如下:

1 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
2 <map>
3 <string name="STRING_KEY">string</string>
4 <int name="INT_KEY" value="0"/>
5 <boolean name="BOOLEAN_KEY" value="true"/>
6 </map>

常用方法:
    public abstract boolean contains (String key) ----- 判断SharedPreferences是否包含特定key的数据
    public abstract SharedPreferences.Editor edit () ----- 返回一个Edit对象用于操作SharedPreferences
    public abstract Map<String, ?> getAll () ------ 获取SharedPreferences数据里全部的key-value对象
    getXXX(String key,XXX defvlaue) ------ 获取SharedPreferences数据指定key所对应的value,如果该key不存在,返回默认值defValue。其中XXX可以是boolean、float、int、long、String等基本类型的值
Editor接口的常用方法:
    public abstract SharedPreferences.Editor clear () ---- 清空SharedPreferences里所有的数据
    public abstract boolean commit () ----- 当Editor编辑完成后,调用该方法可以提交修改,而且必须要调用这个数据才修改
    public abstract SharedPreferences.Editor putXXX (String key, boolean XXX) ---- 向SharedPreferences存入指定的key对应的数据,其中XXX可以是boolean、float、int、long、String等基本类型的值
    public abstract SharedPreferences.Editor remove (String key) ----- 删除SharedPreferences里指定key对应的数据项

  在程序代码

  SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章