【问题标题】:Android - SharedPreferences - can't get my valueAndroid - SharedPreferences - 无法获得我的价值
【发布时间】:2014-11-16 14:47:19
【问题描述】:

我有一个很奇怪的问题。

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

我无法获得的唯一值类型是整数

让我描述一下情况:

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

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 异常”。好的。但这很奇怪。如果没有这样的资源,为什么我的 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

那怎么了?当我试图获取它时,我的值怎么可能是 Integer 并引发异常?

【问题讨论】:

  • ResourceNotFoundException 在哪里引发?我认为您的代码不会在 if 块内执行。在 if 语句的条件下抛出异常

标签: java android sdk key


【解决方案1】:

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

还有什么是你的 isKeyExists 的实现。您可以尝试使用sharedPreferences's contains method 来检查密钥是否存在。

此外,不确定您的 getInt() 方法是什么。你可以使用sharedPreferences' getInt(),你应该把键名作为第一个参数,一个默认值作为第二个参数。所以你可以做类似 pref.getInt("all_tasks", 0) 的事情,如果不存在值,则返回 0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多