У меня есть минимальная программа, которая делает чуть больше, чем позволяет мне установить два предпочтения (int и String) с помощью Android PreferenceActivity
.Итак, у меня есть XML-файл, который определяет мои предпочтения, и действие, которое распространяется на PreferenceActivity
.У моего основного действия есть меню опций, которое запускает мое предпочтительное действие.Все это прекрасно работает.Я могу установить свои предпочтения, и значения будут сохраняться во время и после выполнения моей программы.
Теперь в своей основной деятельности я хочу получить эти предпочтения.Должно быть легко, правда?Вот код из каждого примера, который я когда-либо видел:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int intSetting = prefs.getInt("intSetting", 0);
String strSetting = prefs.getString("strSetting", "");
Проблема в том, что если я прервусь при вызове getInt()
и перешагну, мой стек будет выглядеть следующим образом, и приложение будет аварийно завершаться, если я продолжу:
Тема [<3> main] (приостановлено)
ActivityThread.performLaunchActivity (ActivityThread $ ActivityRecord, Intent) строка: 2494
ActivityThread.handleLaunchActivity (ActivityThread $ ActivityRecord, Intent) строка: 2512
ActivityThread.access $ 2200 (ActivityThread, ActivityThread $ ActivityRecord, Intent) строка: 119
ActivityThread $ H.handleMessage (Сообщение) строка: 1863
ActivityThread $ H (Обработчик) .dispatchMessage (Сообщение) строка: 99 Looper.loop () строка: 123
ActivityThread.main (String []) строка: 4363 Method.invokeNative (Object, Object [], Class, Class [], Class, int, boolean) строка: недоступно[собственный метод] Method.invoke (Object, Object ...) строка: 521
ZygoteInit $ MethodAndArgsCaller.run () строка: 860 ZygoteInit.main (String []) строка: 618 NativeStart.main (String [])линия: безрезультатноable [нативный метод]
Я пробовал варианты параметров, передаваемых getDefaultSharedPreferences (), в том числе:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
... и, возможно, некоторые другие в другом контексте (то есть, когда я получаю доступ к предпочтениям из моего основного занятия по сравнению с другим занятием против некоторой функции в классе, которая не является занятием.Результат всегда один и тот же.
Я прочитал в Интернете дюжину постов с вопросами и ответами от других людей с этой проблемой, которые решили ее, написав код, идентичный моему, поэтому я не думаю, что есть решение, ноесли у кого-то есть идеи, дайте мне знать.