保存数据已完成,但我无法检索显示的数据
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",""));
请帮我解决这个问题。
答案 0 :(得分:0)
准备好所有项目的ArrayList后,将其转换为逗号分隔的字符串。
String itemsString = TextUtils.join(",", historyList);
preference.save("History", itemsString);
检索时,将其转换回数组。
String [] itemsArray = preference.readString("History","").split(",");
答案 1 :(得分:0)
检索值
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();
答案 2 :(得分:0)
您可以通过将数组列表转换为字符串来将其添加到首选项中。
首先使用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);
答案 3 :(得分:-1)
由于您要保存Set
,因此您需要将Set
检索到String
,然后再将其转换为List
。
Set<String> set = preference.getStringSet("History", null);
List<String> historyList = new ArrayList<>();
historyList.addAll(set);