【问题标题】: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);
    

    【讨论】:

    • 我可以知道为什么这被否决
    • 仅代码的答案不好。最好在代码中添加解释
    • @Micho 编辑了答案
    【解决方案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);
        

        【讨论】:

          猜你喜欢
          • 2011-04-04
          • 2016-11-06
          • 1970-01-01
          • 2016-07-30
          • 2013-11-14
          • 2016-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多