Получение java.lang.nullPointerException с использованием SharedPreferences - PullRequest
0 голосов
/ 23 июня 2010

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

Я использую общие настройки для сохраненияданные и получить его, но получаю ошибку.Вот код:

SharedPreferences settings =  getPreferences(0);
String today = new Date(System.currentTimeMillis()).toString();
SharedPreferences.Editor edit = settings.edit();
System.out.println("******** Today : " + today);
edit.putString("lastdate", today);

String fetch = settings.getString("lastdate", "0");
System.out.println("******** Fetch : " + fetch);
txtTest.setText(fetch);

Но я получаю ошибку нулевого указателя, я что-то упустил?

Ответы [ 2 ]

7 голосов
/ 23 июля 2010

Многие приложения могут предоставлять способ захвата пользовательских настроек в настройках конкретного приложения или действия. Для поддержки этого Android предоставляет простой набор API.

Предпочтения обычно представляют собой пары имя-значение. Они могут быть сохранены как «Общие настройки» для различных действий в приложении (обратите внимание, что в настоящее время они не могут быть разделены между процессами). Или это может быть что-то, что должно храниться отдельно от действия.

  1. Общие настройки: общие настройки могут использоваться всеми компонентами (действиями, службами и т. Д.) Приложений.

  2. Предпочтения, обработанные действием: эти предпочтения могут использоваться только в упражнении и не могут использоваться другими компонентами приложения.

Общие настройки:

Управление общими настройками осуществляется с помощью метода getSharedPreferences класса Context. Предпочтения хранятся в файле по умолчанию (1), или вы можете указать имя файла (2), которое будет использоваться для обращения к предпочтениям.

(1) Вот как вы получаете экземпляр при указании имени файла

public static final String PREF_FILE_NAME = "PrefFile";
   SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE - режим работы для предпочтений. Это режим по умолчанию и означает, что созданный файл будет доступен только вызывающему приложению. Поддерживаются два других режима: MODE_WORLD_READABLE и MODE_WORLD_WRITEABLE. В MODE_WORLD_READABLE другое приложение может прочитать созданный файл, но не может изменить его. В случае MODE_WORLD_WRITEABLE другие приложения также имеют права на запись для созданного файла.

(2) Рекомендуемый способ - использовать в режиме по умолчанию, без указания имени файла

SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context);

Наконец, когда у вас есть экземпляр предпочтений, вот как вы можете извлечь сохраненные значения из предпочтений:

 int storedPreference = preferences.getInt("storedInt", 0);

К сохранить значения в файле настроек SharedPreference.Editor должен использоваться объект. Editor - это вложенный интерфейс класса SharedPreference.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Редактор также поддерживает такие методы, как remove() и clear() для удаления значения предпочтения из файла.

Настройки деятельности:

Общие настройки могут использоваться другими компонентами приложения. Но если вам не нужно делиться настройками с другими компонентами и хотите, чтобы действия были частными. Вы можете сделать это с помощью метода действия getPreferences(). Метод getPreference использует метод getSharedPreferences() с именем класса активности для имени файла настроек.

Ниже приведен код для получения настроек

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

Код для хранения значений такой же, как и в случае общих настроек.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Вы также можете использовать другие методы, такие как сохранение состояния активности в базе данных. Примечание. Android также содержит пакет под названием android.preference. Пакет определяет классы для реализации пользовательского интерфейса настроек приложения.

Чтобы увидеть больше примеров, посмотрите сообщение Android Storage на сайте разработчиков.

1 голос
/ 23 июня 2010

Вам нужно изменить способ получения объекта

SharedPreferences settings = PreferenceManager
                    .getDefaultSharedPreferences(context);
...