Не могу получить доступ к настройкам, созданным предпочтительностью

StackOverflow https://stackoverflow.com/questions/3497542

Вопрос

У меня есть минимальная программа, которая делает немного больше, чем позвольте мне установить два предпочтения (int и строку) с помощью Android PreferenceActivity. Отказ Поэтому у меня есть файл XML, который определяет мои предпочтения, и активность, которая расширяется PreferenceActivity. Отказ Моя основная деятельность имеет меню опций, которое запускает свою предпочтению активности. Все это отлично работает. Я могу установить свои предпочтения, и значения сохраняются во время и после выполнения моей программы.

Теперь в моей главной деятельности я хочу получить эти предпочтения. Должно быть легко, верно? Вот код от каждого образца, который я когда-либо видел:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int intSetting = prefs.getInt("intSetting", 0);
String strSetting = prefs.getString("strSetting", "");

Проблема в том, что если я сломаюсь на getInt() Позвоните и найдите, мой стек выглядит так, как и приложение, если я продолжу:

Тема [<3> Главная] (приостановлено)
ActivityThread.performlaunchactivity (ActivityThread $ ActivityRecord, Intent) Линия: 2494
ActivityThread.handleLaunchactivity (ActivityThread $ PartionRecord, Intent) Линия: 2512
ActivityThread.Access $ 2200 (ActivityThread, ActivityThread $ PartyRecord, Intent) Линия: 119
ActivityThread $ h.handlemessage (сообщение) Линия: 1863
ActivityThread $ h (Handler) .dispatchmessage (сообщение) Линия: 99 looper.loop () Линия: 123
ActivityThread.main (String []) Строка: 4363 Метод. Винваканс (объект, объект [], класс, класс [], класс, int, boolean) line: не в наличии [нативный метод] метод. INVOKE (объект, объект .. ,) Строка: 521
Zygoteinit $ methodandargscaller.run () Линия: 860 Zygoteinit.main (String []) Строка: 618 Nativestart.main (строка []) Линия: не в наличии [родной метод

Я пробовал вариации на параметре, переданном GetDefaultSharedPreferences (), в том числе:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

... И, вероятно, некоторые другие в разном контексте (т. Е. При доступе к предпочтениям из моего основного вида деятельности против другая активность против некоторой функции в классе, которые не являются активностью. Результатом всегда одинаковы.

Я прочитал дюжину Q & A посты в Интернете от других с этой проблемой, которая решила его, написав код, идентичный моим, поэтому я не ожидаю, что есть решение, но если у кого-то есть какие-либо идеи, дайте мне знать.

Это было полезно?

Решение

Вы не показываете трассировку стека. То Thread [<3> main] (Suspended) бесполезный вывод из затмения. Вам необходимо изучить трассировку реального стека, который вы должны получить, позволяя Android продолжать диалоговое окно «Сил закрыть», затем, глядя на LogCat (в вашей перспективе DDMS) для трассировки стека.

Я думаю, что у вас есть предпочтение по имени intSetting Но это не целое число, но это просто предположение. От манжеты, я не могу думать о каком-либо из встроенного Preference Классы, которые будут хранить целочисленные предпочтения, как они в основном хранят строки.

Ваш способ доступа к по умолчанию SharedPreferences (с использованием this) правильно и не должен быть изменен.

Вот образец проекта показывая использование PreferenceActivity и получить SharedPreferences назад.

Другие советы

Просто чтобы убедиться:

  • В тебе AndroidManifest Вы должны иметь Activity это распространяется PreferenceActivity С чем-то вроде это:

    <ДЕЯТЕЛЬНОСТЬ Android: name = ". Деятельность.preferences" Android: label = "@ String / app_name" />

  • То Activity это распространяется PreferenceActivity должен иметь следующий код:

    @Override защищена пустота накрестности (расслоение SavedInstanceState) {Super.oncreate (SavedInstanceState); AddPreferencesFromResource (r.layout.prefs); }

куда R.layout.prefs это ваши предпочтения XML.

Если вы сделали оба вещи, пожалуйста, отредактируйте свой вопрос с XML, который вы используете, поэтому PPL может воспроизвести вашу проблему.

Это не хватало бы, даже если ваши предпочтения не было спасено, я думаю, что вы пропустили какой-то код, и авария не приходит с этого момента. У вас есть другие темы?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top