2014-11-16 6 views
1

У меня очень странная проблема.Android - SharedPreferences - не могу получить мое значение

Я использую пары ключ/значение, чтобы сохранить данные приложения. И все отлично! Я могу сохранить и получить строковые значения и логические значения.

Единственный тип значения, я не могу получить это Integer

Позвольте мне описать ситуацию:

В одной деятельности, я сохранить пару ключей/значение таким образом:

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

И againg бросает исключение:

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

Так что случилось? Как мое значение может быть Integer и генерирует исключение, когда я пытаюсь его получить?

+0

Где находится ResourceNotFoundException? Я думаю, что ваш код не выполняется внутри блока if. Исключение выбрасывается при условии if –

ответ

1

Вы извлекаете общие настройки из того же префикса. В методе addElement используется «MentalCalculationSaveData». Убедитесь, что вы используете один и тот же файл для извлечения.

Также какова реализация вашего isKeyExists. Вы можете попытаться использовать sharedPreferences's contains method, чтобы проверить, существует ли ключ или нет.

Кроме того, не уверен, какой у вас метод getInt(). Вы можете использовать sharedPreferences' getInt(), который вы должны поместить имя ключа в качестве первого параметра, значение по умолчанию в качестве второго параметра. Таким образом, вы можете сделать что-то вроде pref.getInt («all_tasks», 0), если значение не существует, возвращается 0.

Смежные вопросы