Android - SharedPreferences - 无法获得我的价值

时间:2014-11-16 14:47:19

标签: java android sdk key

我有一个非常奇怪的问题。

我使用键/值对来保存我的应用程序数据。它工作正常!我可以保存并获取字符串值和布尔值。

我唯一得到的唯一值是整数

让我来描述一下情况:

在一项活动中,我以这种方式保存我的键/值对:

addElement(getApplicationContext(), "all_tasks", Integer.parseInt(allTasks.getText().toString()));

我在KeyValueStorageHelper.java文件中使用此方法:

/* Записать новую целочисленную пару */
public static void addElement(Context context, String key, int value) {
    ContextWrapper contextWrapper = new ContextWrapper(context);
    SharedPreferences.Editor sharedPreferences = contextWrapper.getSharedPreferences("MentalCalculationSaveData", ContextWrapper.MODE_PRIVATE).edit();
    sharedPreferences.putInt(key, value);
    sharedPreferences.apply();
}

在那之后,在另一个活动中,我尝试这样做,而奇怪的是:

if (isKeyExists(getApplicationContext(), "all_tasks"))
        Toast.makeText(getApplicationContext(), getInt(getApplicationContext(), "all_tasks"),Toast.LENGTH_LONG).show();

此代码抛出" ResouceNotFound Exception"。好。但这很奇怪。如果没有这样的资源,为什么我的if-else块返回true?

之后我建议,这可能不是整数键/值对。

我试过了:

Toast.makeText(getApplicationContext(), (int)getFloat(getApplicationContext(), "all_tasks"),Toast.LENGTH_LONG).show();

它引起了异常:

java.lang.Integer cannot be cast to java.lang.Float

那有什么不对?当我想要获得它时,我的值如何成为整数并抛出异常?

1 个答案:

答案 0 :(得分:1)

您是否从同一个pref检索共享首选项?在你的addElement方法中,你使用" MentalCalculationSaveData"一。确保使用相同的检索。

您的isKeyExists的实现方式也是如此。您可以尝试使用sharedPreferences's contains method检查密钥是否存在。

另外,不确定你的getInt()方法是什么。您可以使用sharedPreferences' getInt(),您应将键名作为第一个参数,默认值作为第二个参数。所以你可以做一些像pref.getInt(" all_tasks",0)的事情,如果没有值,0将返回。