我有一个非常奇怪的问题。
我使用键/值对来保存我的应用程序数据。它工作正常!我可以保存并获取字符串值和布尔值。
我唯一得到的唯一值是整数
让我来描述一下情况:
在一项活动中,我以这种方式保存我的键/值对:
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
那有什么不对?当我想要获得它时,我的值如何成为整数并抛出异常?
答案 0 :(得分:1)
您是否从同一个pref检索共享首选项?在你的addElement方法中,你使用" MentalCalculationSaveData
"一。确保使用相同的检索。
您的isKeyExists的实现方式也是如此。您可以尝试使用sharedPreferences's contains method检查密钥是否存在。
另外,不确定你的getInt()方法是什么。您可以使用sharedPreferences' getInt(),您应将键名作为第一个参数,默认值作为第二个参数。所以你可以做一些像pref.getInt(" all_tasks",0)的事情,如果没有值,0将返回。