前言
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">[ { "age": 16, "name": "张三", "score": 500.0 }, { "age": 17, "name": "李四", "score": 490.0 }, { "age": 15, "name": "王五", "score": 580.0 } ]</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());
参考文章
© 版权声明