尝试从共享首选项中检索数据时我错过了什么

时间:2015-05-14 14:42:49

标签: java android list arraylist sharedpreferences

嘿guyz检查我在这里缺少的是因为我无法从共享首选项中获取所有数据。 我正在制作这样一个任务列表应用程序,其中我使用某个键保存我的数据(表示mytask)并将其存储在共享的Preferences中,并为总计数增加一个变量。

检查我的代码(每当我点击addTask按钮时,执行以下代码)。

private void saveToSharedPreference(){
    sharedPre = getSharedPreferences("todoPref",Context.MODE_PRIVATE);
    editor = sharedPre.edit();
    String myKey = "key"+a;
    String myValue = et.getText().toString();
    editor.putString(myKey,myValue);
//        editor.putInt("totalTask", a);
    editor.commit();
} 

现在当我关闭应用程序并再次打开它时,会执行以下代码以便从共享首选项加载数据。

private  void loadData(){
    sharedPre = getSharedPreferences("todoPref",Context.MODE_PRIVATE);
    int p = 1;
    String myKey = "key"+p;
    while(sharedPre.getString(myKey,"") != null){
        Toast.makeText(this, sharedPre.getString(myKey,""),Toast.LENGTH_SHORT).show();
    }
}

但问题是它总是在所有索引上返回null。我不知道为什么我会收到这个错误。请帮我 提前致谢 Sarosh Madara

3 个答案:

答案 0 :(得分:1)

这样做 -

1)像这样保存共享偏好 -

private void saveToSharedPreference(){
    sharedPre = getSharedPreferences("todoPref",Context.MODE_PRIVATE);
    editor = sharedPre.edit();
    String myKey = "key";                        // removed +a
    String myValue = et.getText().toString();
    editor.putString(myKey,myValue);
//        editor.putInt("totalTask", a);
    editor.commit();
} 

2)像这样加载 -

 private void loadData() {
       sharedPre = getSharedPreferences("todoPref",Context.MODE_PRIVATE);
       int p = 1;
       String myKey = "key";  // removed "+p"
        String value = sharedPre.getString(myKey, ""); 

    }

答案 1 :(得分:1)

加载所有保存的值只需使用以下代码:

private void loadData() {
        SharedPreferences sharedPre = getSharedPreferences("todoPref",android.content.Context.MODE_PRIVATE);
        Map<String,?> keys = sharedPre.getAll();
        for(Map.Entry<String,?> entry : keys.entrySet()){
                if (entry.getValue().toString().length() > 0) {
                    Log.d("map values",entry.getKey() + ": " + entry.getValue().toString());     
                }
         }
    }

我发现它here但添加了一个检查以忽略空值。

将值保存到共享首选项我建议使用该键的当前时间实例。无需保存任何整数键值:

private void saveToSharedPreference(String myValue){
        SharedPreferences sharedPre = getSharedPreferences("todoPref",android.content.Context.MODE_PRIVATE);
        Editor editor = sharedPre.edit();
        String key = String.valueOf(Calendar.getInstance().getTimeInMillis());
        editor.putString(key,myValue);
        editor.commit();
    } 

因此,无论何时您想要向共享首选项添加值,请使用:

saveToSharedPreference("myValue");

并加载它们全部使用:

loadData();

地图界面

Map是将键映射到值的对象。地图不能包含重复键:每个键最多可映射一个值。 read more...

SharedPreferences:Class Overview

答案 2 :(得分:0)

请勿在while循环中与!= null进行比较。使用下面的代码,看看问题是否解决: -

private  void loadData(){
    sharedPre = getSharedPreferences("todoPref",Context.MODE_PRIVATE);
    int p = 1;
    String myKey = "key"+p;
    String value = sharedPre.getString(myKey,""); 
    if(!value.equalsIgnoreCase("")){
        Toast.makeText(this, sharedPre.getString(myKey,""),Toast.LENGTH_SHORT).show();
    }
}