Android Sharedpreferance保存数组列表问题

时间:2017-02-14 04:57:24

标签: android sharedpreferences

保存数据已完成,但我无法检索显示的数据

  

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",""));

请帮我解决这个问题。

4 个答案:

答案 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);