【问题标题】:Android Sharedpreferance saving array list issue [duplicate]Android Sharedpreference保存数组列表问题[重复]
【发布时间】:2017-07-02 06:32:01
【问题描述】:
保存数据已完成,但我无法检索它显示的数据
java.util.HashSet 不能转换为 java.lang.String
这是我的代码。(保存)
List<String> historyList = new ArrayList<>();
historyList.add(data.get(position).getProductName());
Set<String> set = new HashSet<>();
set.addAll(historyList);
preference.save("History", set);
(检索)
Log.d("History", "hhhhhhhhhhhhhhhhh" +preference.readString("History",""));
请帮我解决这个问题。
【问题讨论】:
标签:
android
sharedpreferences
【解决方案1】:
由于您保存的是Set,因此您需要检索Set 而不是String,然后您可以再次将其转换为List。
Set<String> set = preference.getStringSet("History", null);
List<String> historyList = new ArrayList<>();
historyList.addAll(set);
【解决方案2】:
准备好所有项目的 ArrayList 后,将其转换为逗号分隔的字符串。
String itemsString = TextUtils.join(",", historyList);
preference.save("History", itemsString);
当你检索它时,将它转换回一个数组。
String [] itemsArray = preference.readString("History","").split(",");
【解决方案3】:
检索值
Gson gson = new Gson();
String jsonText = Prefs.getString("key", null);
String[] text = gson.fromJson(jsonText, String[].class); //EDIT: gso to gson
设置值
Gson gson = new Gson();
List<String> historyList = new ArrayList<>();
historyList.addAll(data);
String jsonText = gson.toJson(historyList);
prefsEditor.putString("key", jsonText);
prefsEditor.commit();
【解决方案4】:
您可以通过将数组列表转换为字符串来将它们添加到首选项。
首先使用Gson 将您的数组转换为字符串。
ArrayList<CustomObject> yourlist=new ArrayList<>();
public static final String MY_PREFS_NAME = "MyPrefsFile";
填满你的数组
Gson gson=new Gson();
String myfav = gson.toJson(yourlist);
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putString("myfav", myfav);
editor.commit();
然后在你需要的地方读取这个字符串
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME,MODE_PRIVATE);
String restoredText = prefs.getString("myfav", null);
现在通过以下方式取回您的数组列表:
Type type = new TypeToken<ArrayList<CustomObject>>() { }.getType();
ArrayList<CustomObject> yourfinallist=new ArrayList<>();
gson = new Gson();
yourfinallist = gson.fromJson(myfav, type);