前言
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());
参考文章
© 版权声明