Android开发之数据存储SharedPreferences

来源:互联网 发布:app后端开发架构 java 编辑:程序博客网 时间:2024/05/07 23:27

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

获取SharedPreferences的两种方式:

  1. 调用Activity对象的getPreferences(int mode)方法
  2. 调用Context对象的getSharedPreferences(String name, int mode)方法
  3. 调用Context对象的getDefaultSharedPreferences(Context context)方法
SharedPreferences可以保存Boolean、Int、Float、Long、String等类型,一般是SharedPreferences.Editor的putXXX()方法保存,并commit()方法提交或者是remove()方法移除,clear()方法清空,当然操作完成后需要commit()方法提交。

1. 调用Activity对象的getPreferences(int mode)方法

通过此方法获得的SharedPreferences对象只能在该Activity中使用,在Activity中可以调用getPreferences(int mode)方法获得一个SharedPreferences,文件名和Activity名一致。

四种操作模式:

  1. Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,对应数字0;
  2. MODE_WORLD_READABLE:表示当前文件可以被其他应用读取,对应数字1;
  3. MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入,对应数字2;

2. 调用Context对象的getSharedPreferences(String name, int mode)方法
自定义偏好设置,通过此方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享。

保存到SharedPreferences:

SharedPreferences preferences=getSharedPreferences("user",Context.MODE_PRIVATE);Editor editor=preferences.edit();String name="xixi";String age="22";editor.putString("name", name);editor.putString("age", age);editor.commit();
从SharedPreferences:

SharedPreferences preferences=getSharedPreferences("user", Context.MODE_PRIVATE);String name=preferences.getString("name", "defaultname");String age=preferences.getString("age", "0");

3. 调用Context对象的getDefaultSharedPreferences(Context context)方法


每个应用有一个默认的偏好文件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>


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

参考:http://samyou.iteye.com/blog/1190698 

            http://www.cnblogs.com/wisekingokok/archive/2011/09/16/2177833.html



原创粉丝点击