前言

Android中的SharedPreferences经常使用,这里就对着存储的数据类型进行简单的记录,方便自己回顾。

正文

进入SharedPreferences.java看一下主要的方法。

写入方法

常用的写入数据的方法如下

Editor putStringSet(String key, @Nullable Set<String> values);
Editor putString(String key, @Nullable String value);
Editor putInt(String key, int value);
Editor putLong(String key, long value);
Editor putFloat(String key, float value);
Editor putBoolean(String key, boolean value);

读出方法

常用的读出数据的方法有如下

String getString(String key, @Nullable String defValue);
Set<String> getStringSet(String key, @Nullable Set<String> defValues);
int getInt(String key, int defValue);
long getLong(String key, long defValue);
float getFloat(String key, float defValue);
boolean getBoolean(String key, boolean defValue);

保存List数据

SharedPreferences还可以存储List数据(Collection下的ArrayList,HashSet等),不过类型限定死了,只能是String类型。

使用的方法

Editor putStringSet(String key, @Nullable Set<String> values);
Set<String> getStringSet(String key, @Nullable Set<String> defValues);
存储String类型的List数据

只能是String类型的

写入
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
SharedPreferences sharedPreferences = getSharedPreferences("PREFS_LIST", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putStringSet("KEY_LIST", new HashSet<>(list));
editor.apply();

存储的数据

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <set name="KEY_LIST">
        <string>李四</string>
        <string>张三</string>
        <string>王五</string>
    </set>
</map>
读出
ArrayList<String> list = new ArrayList<>();
SharedPreferences sharedPreferences = getSharedPreferences("PREFS_LIST", Context.MODE_PRIVATE);
Set<String> set = sharedPreferences.getStringSet("KEY_LIST", new HashSet<>());
list.addAll(set);
存储自定义的类List数据

如果是自定义类呢,比如Student类

public class Student {
    private final int age;
    private final String name;
    private final float score;

    public Student(int age, String name, float score) {
        this.age = age;
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public float getScore() {
        return score;
    }

    @NonNull
    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", score=" + score +
                '}';
    }
}
private ArrayList<Student> mList = new ArrayList<>();
//添加数据
mList.add(new Student(16, "张三", 500));
mList.add(new Student(17, "李四", 490));
mList.add(new Student(15, "王五", 580));

此时如果SharedPreferences要存储mList时,直接使用putStringSet()时不可的。

下面介绍使用方式,需要使用Json存储。

这里使用Gson进行对数据转换

//https://github.com/google/gson
implementation 'com.google.code.gson:gson:2.11.0'

初始化Gson

mGson = new GsonBuilder().setPrettyPrinting().create();
写入
SharedPreferences sharedPref = getSharedPreferences("PREFS_LIST", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
//mGson把list进行转为String
editor.putString("KEY_LIST", mGson.toJson(mList));
editor.apply();

存储的数据

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="KEY_LIST">[&#10;  {&#10;    &quot;age&quot;: 16,&#10;    &quot;name&quot;: &quot;张三&quot;,&#10;    &quot;score&quot;: 500.0&#10;  },&#10;  {&#10;    &quot;age&quot;: 17,&#10;    &quot;name&quot;: &quot;李四&quot;,&#10;    &quot;score&quot;: 490.0&#10;  },&#10;  {&#10;    &quot;age&quot;: 15,&#10;    &quot;name&quot;: &quot;王五&quot;,&#10;    &quot;score&quot;: 580.0&#10;  }&#10;]</string>
</map>
读出
SharedPreferences sharedPref = getSharedPreferences("PREFS_LIST", Context.MODE_PRIVATE);
String data = sharedPref.getString("KEY_LIST", null);
//通过gson进行转换数据
ArrayList<Student> list = mGson.fromJson(data, new TypeToken<ArrayList<Student>>() {}.getType());

参考文章

相关文章

暂无评论

none
暂无评论...