java - Android - SharedPreferences - 无法获得我的值(value)

标签 java android sdk key

我有一个很奇怪的问题。

我使用键/值对来保存我的应用程序数据。而且效果很好!我可以保存和获取字符串值和 boolean 值。

我无法获取的唯一值类型是Integer

让我描述一下情况:

在一个 Activity 中,我以这种方式保存我的键/值对:

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();
}

在那之后,在另一个 Activity 中,我尝试这样做,奇怪的事情来了:

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

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

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

我试过这个:

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

它再次抛出异常:

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

那怎么了?当我试图获取它时,我的值怎么会是 Integer 并抛出异常?

最佳答案

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

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

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

关于java - Android - SharedPreferences - 无法获得我的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26958196/

相关文章:

java - 在与当前类同名的类上使用 Spring @Autowired

java - 检查 Firebase 实时数据库中是否存在某个字段

java - 在 android 启动时运行应用程序

android - 以编程方式捕获网络流量(无根)

android - 界面上的 Kotlin 扩展

Android Studio 无法识别 Facebook 导入

java - 从字符串中删除重复的单词

android - 播放视频时应用程序崩溃

Javascript SDK - 必须使用事件访问 token 来查询有关当前用户的信息

android - 不支持 Twilio 视频编解码器 H264