Android 数据存储之SharedPreferences

2019-07-16  本文已影响0人  xiesen

SharedPreferences简介

SharedPreferences是Android提供的一种存储数据的机制,用于存储少量数据,数据类型包括(boolean 、int、long、float、string),主要用于存储应用的配置信息,例如:用户名、密码、是否开启震动、音乐等。

​ 它实际上是以键值对的形式储存在xml文件中。存储位置:data/data/程序包名/shared_prefs/ 目录下。

保存数据

先看下代码:

SharedPreferences mPreferences = getSharedPreferences("test", Context.MODE_PRIVATE);
SharedPreferences.Editor mEditor = mPreferences.edit();
mEditor.putInt("int", 1);
mEditor.putBoolean("boolean", true);
mEditor.putFloat("float", 3.14f);
mEditor.putLong("long", 123l);
mEditor.putString("string", "abcd");
mEditor.commit();
mPreferences.registerOnSharedPreferenceChangeListener(mListener);

第1行 通过context获取SharedPreferences对象SharedPreferences
第一个参数表示要操作的xml文件名。
第二个参数 操作模式,操作模式如下:Context类中的变量,类型为public static final int。

第2行 获取Editor对象,通过editor对象来更改SharedPreferences中的内容。
第3~7行 设置键值对。
第8行 提交修改。(很重要,如果不执行则并没有更改数据)。

查看下Editor的一些方法: Editor的一些方法.png

以put开头的是设置键值对的方法。rmove方法用来移除某键值对。
apply() 和commit()都可以用来保存修改。

获取数据

代码如下:

int a = mPreferences.getInt("int", 0);
boolean bool = mPreferences.getBoolean("boolean", false);
float f = mPreferences.getFloat("float", 0.0f);
long l = mPreferences.getLong("long", 0);
String s = mPreferences.getString("string", "");
String wifi = mPreferences.getString("wifi", "5566");

监听数据改变

SharedPreferences类中提供了监听数据变化的接口,代码如下

private OnSharedPreferenceChangeListener mListener= 
        new OnSharedPreferenceChangeListener() {
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        Log.i(TAG, "Changed key="+key);
    }
};
//注册监听
mPreferences.registerOnSharedPreferenceChangeListener(mListener);

当SharedPreferences中的数据修改后,会回调mListener中的onSharedPreferenceChanged方法,通过参数key可以知道哪个键值进行了变动。
我们来尝试修改一下:

mEditor.putInt("int", 1);
mEditor.putString("string", "ab");
mEditor.remove("long");
mEditor.commit();

打印如下:

06-27 11:55:47.015 I/MainActivity( 2408): Changed key=string
06-27 11:55:47.015 I/MainActivity( 2408): Changed key=long

由于原先的int键对应的值为1,该值没有改变,所以不会回调onSharedPreferenceChanged。而string键的值由abcd变成了ab,删除了long键,所以这两个键更改都有回调。

取消监听SharedPreference

mPreferences.unregisterOnSharedPreferenceChangeListener(mListener);

以上就是SharedPreferences的简单用法。

总结

 1)写入数据:
     //步骤1:创建一个SharedPreferences对象
     SharedPreferences sharedPreferences= getSharedPreferences("data",Context.MODE_PRIVATE);
     //步骤2: 实例化SharedPreferences.Editor对象
     SharedPreferences.Editor editor = sharedPreferences.edit();
     //步骤3:将获取过来的值放入文件
     editor.putString("name", “Tom”);
     editor.putInt("age", 28);
     editor.putBoolean("marrid",false);
     //步骤4:提交               
     editor.commit();


 2)读取数据:
     SharedPreferences sharedPreferences= getSharedPreferences("data", Context .MODE_PRIVATE);
     String userId=sharedPreferences.getString("name","");
  
3)删除指定数据
     editor.remove("name");
     editor.commit();


4)清空数据
     editor.clear();
     editor.commit();

Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写;
Context.MODE_WORLD_READABLE:  指定该SharedPreferences数据能被其他应用程序读,但不能写;
Context.MODE_WORLD_WRITEABLE:  指定该SharedPreferences数据能被其他应用程序读;
Context.MODE_APPEND:该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件;
上一篇下一篇

猜你喜欢

热点阅读