【问题标题】:save data from arraylist to shared preferences not working将数据从arraylist保存到共享首选项不起作用
【发布时间】:2015-12-10 01:54:02
【问题描述】:

我想将 arraylist 中的数据添加到 sharedpreferences 并检索相同的数据。 但它不工作。我只得到一个值,即最后一个值 并非所有值都是从共享首选项中检索的。我从 JSONArray 首先添加到arraylist 中。 下面是我保存数据的代码。

 JSONArray arr = new JSONArray(strServerResponse);
 JSONObject jsonObj = arr.getJSONObject(0);
 for (int i = 0; i < arr.length(); i++) {
       pojo = new Pojo();
       JSONObject jobj2 = arr.getJSONObject(i);
       String tipoftheday = jobj2.optString("tipsoftheday");
       ArrayList<String> tii = new ArrayList<String>();
       tii.add(tipoftheday);
       SharedPreferences.Editor editor = getSharedPreferences("MyPref", MODE_PRIVATE).edit();
       for (int i1 = 0; i1 < tii.size(); i1++) {
               editor.putString("tipoftheday", TextUtils.join(",", tii));
               editor.commit();
       }
 }

下面是从共享首选项中检索数据并使用 setter 设置 d 的代码 从共享首选项中检索的 ata 并将其添加到列表视图适配器。我不明白这是什么错误。

 SharedPreferences prefs=getSharedPreferences("MyPref", MODE_PRIVATE);
        String serialized = prefs.getString("tipoftheday", null);
        List<String> list = Arrays.asList(TextUtils.split(serialized,","));

for(int i=0; i < list.size(); i++){
            String ttt = list.get(i);
            pojo.setTip(ttt);
            tipsAdapter = new TipsAdapter(TipsActivity.this, tips);
            tips.add(pojo);
            listTips.setAdapter(tipsAdapter);
        }

如何在共享首选项中保存数据?我只得到一个值。

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

    您正在丢失以前的值,因为您正在更新 SharedPreferences.Editor 中的相同键。为了在之后添加更多信息,您必须首先检索您的 String 值,然后添加您的信息,最后将所有信息存储在您的 SharedPreferences.Editor 中。

    编辑

    我觉得应该是这样的,我是在没有任何IDE或编译器的情况下完成的,所以它可能有一些语法错误:)

     SharedPreferences prefs=getSharedPreferences("MyPref", MODE_PRIVATE);
     String serialized = prefs.getString("tipoftheday", null);
     List<String> list;
     if(serialized != null)
         list = Arrays.asList(TextUtils.split(serialized,","));
     list .add(tipoftheday);
    
     SharedPreferences.Editor editor = prefs.edit();
       for (int i1 = 0; i1 < tii.size(); i1++) {
               editor.putString("tipoftheday", TextUtils.join(",", list));
               editor.apply(); // if you do not need the return value, apply is faster than commit
       }
    

    希望对你有帮助

    编辑 2

    还要检查 ρяσѕρєя K 的答案,他发现了你犯的另一个错误:)

    【讨论】:

    • List 处的空指针异常 list = Arrays.asList(TextUtils.split(serialized,","));
    【解决方案2】:

    如何在共享首选项中保存数据。我只得到一个值。

    问题与SharedPreferences 无关,它与当前在 for 循环中设置的数据源有关。

    将适配器设置为:

        for(int i=0; i < list.size(); i++){
              String ttt = list.get(i);
              pojo.setTip(ttt);  
              tips.add(pojo);     
        }
    
    tipsAdapter = new TipsAdapter(TipsActivity.this, tips);
    listTips.setAdapter(tipsAdapter);
    

    【讨论】:

      【解决方案3】:

      当您向 SharedPreference 添加值时,您使用了两个 for 循环。移出内部循环,您的代码将很好地获取列表的所有值。像下面的代码添加更多的行:

       for (int i = 0; i < arr.length(); i++) {
                 pojo = new Pojo();
                 JSONObject jobj2 = arr.getJSONObject(i);
                 String tipoftheday = jobj2.optString("tipsoftheday");
                 ArrayList<String> tii = new ArrayList<String>();
                 tii.add(tipoftheday);
        }
      
      
      
       for (int i1 = 0; i1 < tii.size(); i1++) {
          SharedPreferences.Editor editor = getSharedPreferences("MyPref", MODE_PRIVATE).edit();
          SharedPreferences prefs=getSharedPreferences("MyPref", MODE_PRIVATE);
          StringBuffer stringBuffer = new StringBuffer();
          stringBuffer = prefs.getString("tipoftheday", null).toString();
          editor.putString("tipoftheday", stringBuffer.append(stringBuffer +",", tii.get(i1).toString()));
          editor.commit();
       }
      

      【讨论】:

      • 我收到错误无法解析方法'join(java.lang.String),(jav.lang.String)')
      • 这段代码 sn-p 中没有 join 方法,你可能在别处得到它
      • TextUtils.join 我现在已更新为 StringBuffer
      【解决方案4】:

      试试这个:

      它会起作用的:

      存储数据:

          StringBuilder sb = new StringBuilder();
          JSONArray arr = new JSONArray(strServerResponse);
          JSONObject jsonObj = arr.getJSONObject(0);
          for (int i = 0; i < arr.length(); i++) 
          {
              pojo = new Pojo();
              JSONObject jobj2 = arr.getJSONObject(i);
              String tipoftheday = jobj2.optString("tipsoftheday");
              sb.append(tipoftheday).append(",");
          }
          SharedPreferences.Editor editor = getSharedPreferences("MyPref", MODE_PRIVATE).edit();
          editor.putString("tipoftheday", sb).commit();
      

      要检索数据:

      String[] strArr = getSharedPreferences("MyPref", MODE_PRIVATE).getString("tipsoftheday").split(",");
      

      【讨论】:

        猜你喜欢
        • 2013-07-27
        • 1970-01-01
        • 2019-08-02
        • 1970-01-01
        • 1970-01-01
        • 2014-01-11
        • 2019-04-09
        • 2013-07-25
        • 1970-01-01
        相关资源
        最近更新 更多