Android SharedPreferences的理解与使用
1、获取SharedPreferences:
要想使用 SharedPreferences 来存储数据,首先需要获取到 SharedPreferences 对象。Android中主要提供了三种方法用于得到 SharedPreferences 对象。
1. Context 类中的 getSharedPreferences()方法:
此方法接收两个参数,第一个参数用于指定 SharedPreferences 文件的名称,如果指定的文件不存在则会创建一个,第二个参数用于指定操作模式,主要有以下几种模式可以选择。MODE_PRIVATE 是默认的操作模式,和直接传入 0 效果是相同的。
MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 这两种模式已在 Android 4.2 版本中被废弃。
Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写;
Context.MODE_WORLD_READABLE: 指定该SharedPreferences数据能被其他应用程序读,但不能写;
Context.MODE_WORLD_WRITEABLE: 指定该SharedPreferences数据能被其他应用程序读;
Context.MODE_APPEND:该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件;
2. Activity 类中的 getPreferences()方法:
这个方法和 Context 中的 getSharedPreferences()方法很相似,不过它只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为 SharedPreferences 的文件名。
3. PreferenceManager 类中的 getDefaultSharedPreferences()方法:
这是一个静态方法,它接收一个 Context 参数,并自动使用当前应用程序的包名作为前缀来命名 SharedPreferences 文件。
2.SharedPreferences的使用
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现。使用Preference来存取数据,用到了SharedPreferences接口和SharedPreferences的一个内部接口SharedPreferences.Editor,这两个接口在android.content包中;
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();
注意:如果在 Fragment 中使用SharedPreferences 时,需要放在onAttach(Activity activity)里面进行SharedPreferences的初始化,否则会报空指针 即 getActivity()会可能返回null !
读写其他应用的SharedPreferences 步骤如下(未实践):
1. 在创建SharedPreferences时,指定MODE_WORLD_READABLE模式,表明该 SharedPreferences数据可以被其他程序读取;
2. 创建其他应用程序对应的Context;
3. 使用其他程序的Context获取对应的SharedPreferences;
4. 如果是写入数据,使用Editor接口即可,所有其他操作均和前面一致;