没有从共享首选项中获取数据

时间:2015-09-14 12:27:06

标签: android sharedpreferences

我有异步任务,我从JSONArray格式的服务器获取数据。我想将这些数据保存在共享首选项中,并将其显示在列表视图中。我正在使用适配器。

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);
    List<String> listTemp = tii;
    Set<String> temp = new HashSet<String>(listTemp);
    SharedPreferences.Editor editor = getSharedPreferences("MyPref", MODE_PRIVATE).edit();
    for (int m=0; m<listTemp.size(); m++){
            temp.addAll(listTemp);
            editor.putStringSet("tipoftheday",temp);
            editor.commit();
    }

我正在检索以下代码中的值。

SharedPreferences prefs = getSharedPreferences("MyPref", MODE_PRIVATE);
Set<String> set = prefs.getStringSet("tipoftheday", null);
 for(String p : set)
 {
       pojo.setTip(p);
       tips.add(pojo);

 }
 tipsAdapter = new TipsAdapter(TipsActivity.this, tips);
 listTips.setAdapter(tipsAdapter);

但我只得到一个值。代码有什么问题。任何人都可以帮助我。

2 个答案:

答案 0 :(得分:3)

问题是,当您存储数据时,每次创建新的for

下面:

SharedPreferences.Editor editor = getSharedPreferences("MyPref", MODE_PRIVATE).edit();

并且您在外部JSONArray arr = new JSONArray(strServerResponse); JSONObject jsonObj = arr.getJSONObject(0); SharedPreferences.Editor editor = getSharedPreferences("MyPref", MODE_PRIVATE).edit(); ArrayList<String> tii = new ArrayList<String>(); for (int i = 0; i < arr.length(); i++) { pojo = new Pojo(); JSONObject jobj2 = arr.getJSONObject(i); String tipoftheday = jobj2.optString("tipsoftheday"); tii.add(tipoftheday); } List<String> listTemp = tii; Set<String> temp = new HashSet<String>(listTemp); temp.addAll(listTemp); editor.putStringSet("tipoftheday",temp); editor.commit(); 循环的每次迭代中都获得了prefs,您不必这样做。只需在循环外部获取引用,并在需要时使用它。

下面:

Pojo

尝试将代码更改为以下内容:

pojo = new Pojo();

编辑:在您的“检索”部分代码中,您忘记了实例化for对象。

像:

for(String p : set) {
   pojo = new Pojo();
   pojo.setTip(p);
   tips.add(pojo);
}

所以你的上一个function myFunc(x,y) { x = typeof x !== 'undefined' ? x : 1; y = typeof y !== 'undefined' ? y : 'default value of y'; ... } 循环应该类似于:

    jm.toInt = function(num, base){
       return parseInt(num, arguments.length > 1 ? base: 'default value' );
    }

答案 1 :(得分:1)

您的代码中的问题是您每次都在优先设置Set值,即在每个元素的循环中,这就是为什么您只能获得最后输入的值。更改以下代码

 Set<String> temp = new HashSet<String>(listTemp);
    SharedPreferences.Editor editor = getSharedPreferences("MyPref", MODE_PRIVATE).edit();
    for (int m=0; m<listTemp.size(); m++){
            temp.addAll(listTemp);
            editor.putStringSet("tipoftheday",temp);
            editor.commit();
    }

将其替换为以下

Set<String> temp = new HashSet<String>(listTemp);
    SharedPreferences.Editor editor = getSharedPreferences("MyPref", MODE_PRIVATE).edit();
    for (int m=0; m<listTemp.size(); m++){
            temp.addAll(listTemp);
    }
editor.putStringSet("tipoftheday",temp);
editor.commit();

看看它是否正常工作

修改: -

将添加代码更改为

JSONArray arr = new JSONArray(strServerResponse);
JSONObject jsonObj = arr.getJSONObject(0);
ArrayList<String> tii = new ArrayList<String>();
for (int i = 0; i < arr.length(); i++) {
    pojo = new Pojo();
    JSONObject jobj2 = arr.getJSONObject(i);
    String tipoftheday = jobj2.optString("tipsoftheday");
    tii.add(tipoftheday);

    }

List<String> listTemp = tii;
Set<String> temp = new HashSet<String>(listTemp);
SharedPreferences.Editor editor = getSharedPreferences("MyPref", MODE_PRIVATE).edit();
temp.addAll(listTemp);
editor.putStringSet("tipoftheday",temp);
editor.commit();

检索代码

SharedPreferences prefs = getSharedPreferences("MyPref", MODE_PRIVATE);
Set<String> set = prefs.getStringSet("tipoftheday", null);
 for(String p : set)
 {
       pojo = new Pojo();
       pojo.setTip(p);
       tips.add(pojo);

 }
 tipsAdapter = new TipsAdapter(TipsActivity.this, tips);
 listTips.setAdapter(tipsAdapter);

查看它是否正常工作