我有一个很奇怪的问题。
我使用键/值对来保存我的应用程序数据。而且效果很好!我可以保存和获取字符串值和 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/