学而实习之 不亦乐乎

Android:SharedPreferences 用法

2021-12-29 22:35:45

不同于文件的存储方式, SharedPreferences 是使用键值对的方式来存储数据的。当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。而且 SharedPreferences 还支持多种不同的数据类型存储,如果存储的数据类型是整型,那么读取出来的数据也是整型的;如果存储的数据是一个字符串,那么读取出来的数据仍然是字符串。
因此使用 SharedPreferences 来进行数据持久化要比使用文件更加的方便。

一、使用方法

1、将数据存储到 SharedPreferences 中

要想使用 SharedPreferences 来存储数据,首先需要获取到 SharedPreferences 对象。 Android 中主要提供了3种方法用于得到 SharedPreferences 对象。
[1] Context 类中的 getSharedPreferences()方法
此方法接收两个参数,如下:
第一个参数用于指定 SharedPreferences 文件的名称,如果指定的文件不存在则会创建一个, SharedPreferences 文件都是存放在/ data/data/<package name>/shared_prefs/ 目录下的。
第二个参数用于指定操作模式,目前只有 MODE_PRIVATE 这一种模式可选,它是默认的操作模式,和直接传人 0  效果是相同的,表示只有当前的应用程序才可以对这个 SharedPreferences 文件进行读写。其他几种操作模式均已被废弃, MODE_WORLD_READABLE 和 MODE_wORLD_WRITEABLE 这两种模式是在 Android 4.2版本中被废弃的, MODE_MULTI_PROCESS 模式是在 Android 6.0版本中被废弃的。

[2]Activity类中的 getPreferences ()方法
这个方法和 Context 中的 getSharedPreferences ()方法很相似,不过它只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为 SharedPreferences 的文件名。

[3]PreferenceManager 类中的 getDefaultSharedPreferences ()方法
这是一个静态方法,它接收一个 Context 参数,并自动使用当前应用程序的包名作为前缀来命名 SharedPreferences 文件。得到了 SharedPreferences 对象之后,就可以开始向 Shared Preferences 文件中存储数据了,主要可以分为3步实现。
    (1)调用 SharedPreferences 对象的 edit()方法来获取一个 SharedPreferences.Editor 对象。
    (2)向 SharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用 putBoolean ()方法,添加一个字符串则使用 putString ()方法。
    (3)调用 apply() 方法将添加的数据提交,完成数据存储。
    
说明:SharedPreference 相关修改使用 apply() 方法进行提交会先写入内存,然后异步写入磁盘,commit() 方法是直接写入磁盘。如果频繁操作的话 apply() 的性能会优于 commit,apply会将最后修改内容写入磁盘。但是如果希望立刻获取存储操作的结果,并据此做相应的其他操作,应当使用 commit()。

2、从 SharedPreferences 中读取数据

从 SharedPreferences 文件中读取数据很简单。 SharedPreferences 对象中提供了一系列的 get 方法,用于对存储的数据进行读取,每种 get 方法都对应了 SharedPreferences.Editor 中的一种 put 方法,如读取一个布尔型数据就使用 getBoolean ()方法,读取一个字符串就使用 getString ()方法。这些 get 方法都接收两个参数,第一个参数是键;第二个参数是默认值,即表示当传入的键找不到对应的值时会以什么样的默认值进行返回。

3、从 SharedPreferences 中删除数据

从 SharedPreferences 文件中删除数据也很简单。SharedPreferences 对象中提供了 remove 方法来删除对应 key 的数据。记住要提交数据。
从 SharedPreferences 文件中清空数据用 clear()即可。

二、实例

1、存数据

    SharedPreferences sp = getSharedPreferences("data", MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.putString("name", "Big Z");
    editor.putInt("age", 18);
    editor.putBoolean("man", true);
    editor.apply();

2、取数据

    SharedPreferences sp = getSharedPreferences("data", MODE_PRIVATE);
    String name = sp.getString("name", "aaa");
    int age = sp.getInt("age", 0);
    boolean man = sp.getBoolean("man", false);

3、清除数据

    SharedPreferences sp = getSharedPreferences("data", MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.clear();


4、删除文件

public static void deleteFile(Context context){
    File file = new File(DATA_URL + context.getPackageName().toString() + SHARED_PATH);
    if (file.exists()){
        file.delete();
        Toast.makeText(context,"文件删除成功!",Toast.LENGTH_SHORT).show();
    }else {
        Toast.makeText(context,"没有文件可以删除,请创建一个文件!",Toast.LENGTH_SHORT).show();
    }
}