Общие ссылки Android недоступны в Main, другие действия в порядке?

#android #sharedpreferences

#Android #общие ссылки

Вопрос:

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

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    SharedPreferences prefs = this.getPreferences(Context.MODE_PRIVATE);
    int test = prefs.getInt("PREF_DIFFICULTY", 0);
}
  

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

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.dawghouse.dd"
android:versionCode="1" android:versionName="1.0">

<application android:label="@string/app_name" android:icon="@drawable/icon">
    <activity android:name=".activity.Main" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".activity.BlockOutgoing" android:label="@string/outgoingTitle" />
    <activity android:name=".activity.BlockIncoming" android:label="@string/incomingTitle" />
    <activity android:name=".activity.TimeManager" android:label="@string/timeManagerTitle" />
    <activity android:name=".activity.Preferences" android:label="@string/preferences" />
</application>

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
</manifest>
  

заранее спасибо!!

Ответ №1:

Попробуйте:

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

и посмотрите, работает ли это лучше.

Ответ №2:

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

Ответ №3:

getPreferences(mode) Вы получаете настройки по умолчанию, вы уверены, что загрузили в них данные? Лучше использовать getSharedPreferences(name, mode) с name будет определенная строковая константа.

Комментарии:

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