Android - получить предпочтение от активности к широковещательному приемнику

Я разрабатываю приложение для Android, но у меня возникла проблема. Когда я пытаюсь получить сохраненное предпочтение из своей деятельности и использовать его в BroadcastReceiver, мне сообщается, что строка, которую я ищу, не существует.

Вот как я сохраняю настройки в Activity:

private void SavePreferences(String key, String value) {                         
  SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
  SharedPreferences.Editor editor = sharedPreferences.edit();
  editor.putString(key, value);
  editor.commit();
}

И вот как я пытаюсь получить предпочтение в BroadcastReceiver:

String pref = PreferenceManager.getDefaultSharedPreferences(context)
  .getString("MEM1", "Does not exist");

Где MEM1 — это строка, которую я сохранил ранее.

Моя проблема в том, что когда я читаю pref, я получаю значение по умолчанию Does not exist вместо моего предпочтительного значения (MEM1). Может ли кто-нибудь указать мне, где я ошибаюсь?


person Andrea    schedule 18.01.2012    source источник
comment
Не могли бы вы вставить фрагмент кода, где вы вызываете метод SavePreference()?   -  person teoREtik    schedule 18.01.2012
comment
SavePreferences(MEM1, ETIdUtente.getText().toString()); теперь я вызываю функцию!   -  person Andrea    schedule 18.01.2012


Ответы (2)


Вы должны использовать..

private void SavePreferences(String key, String value){

        SharedPreferences sharedPreferences = getPreferences("my_prefs", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
       }

А потом

String pref = getSharedPreferences("my_prefs", MODE_PRIVATE).getString("MEM1", "Does not exist");

Также убедитесь, что ваш ключ правильный.

person coder_For_Life22    schedule 18.01.2012
comment
SharedPreferences sharedPreferences = getPreferences(my_prefs, MODE_PRIVATE); Принимать только 1 Int... :( Это дает мне метод getPreferences(int) в типе Activity неприменим для аргументов (String, int) ошибка ›: - person Andrea; 18.01.2012
comment
Проверьте мое редактирование. Посмотрите, как я изменил строку, в которой вы вытаскиваете информацию в приемнике. - person coder_For_Life22; 18.01.2012
comment
Вы должны использовать context.getSharedPreferences(String Key, int); в вашем ресивере. - person coder_For_Life22; 18.01.2012
comment
Это работает :D ты!!!! ^.^ Кстати, это SharedPreferences sharedPreferences = getSharedPreferences(my_prefs,MODE_PRIVATE); ты много :) - person Andrea; 18.01.2012
comment
Я обновлю свой ответ соответственно. Нет проблем =). Рад, что помог. - person coder_For_Life22; 18.01.2012
comment
Я считаю, что лучше использовать отдельный файл при использовании общих настроек, а не по умолчанию. как мы сделали с my_prefs - person coder_For_Life22; 18.01.2012

Activity.getPreferences(mode);

возвращает экземпляр SharedPreferences, относящийся к этому действию (например, XML-файл, поддерживающий его, будет называться так же, как действие), в то время как общие настройки по умолчанию относятся к приложению (имя XML будет основано на вашем имени пакета ).

Либо предоставляйте пользовательское имя файла каждый раз, когда вы получаете SharedPreferences, либо придерживайтесь значения по умолчанию.

person SimonVT    schedule 18.01.2012