Приложение продолжает забывать sharedpreferences при перезапуске

Я больше не знаю, что с ним делать

кажется, работает нормально с android 3.0 и выше, но на android 2.3.3 каждый раз, когда я запускаю приложение, оно снова запрашивает имя пользователя/пароль.

Я использую общие настройки.

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

        SharedPreferences preferences = MyApplication.getAppContext().getSharedPreferences("athopbalance", MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("username", username).commit();
        editor.putString("password", password).commit();

и вот как я их читаю:

    SharedPreferences preferences = MyApplication.getAppContext().getSharedPreferences("athopbalance", Context.MODE_PRIVATE);
    String username = preferences.getString("username", "");
    String password = preferences.getString("password", "");

Я пытался сохранить настройки, используя этот код:

        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MyApplication.getAppContext());
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("username", username).commit();
        editor.putString("password", password).commit();

и прочтите их с помощью этого кода:

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MyApplication.getAppContext());
    String username = preferences.getString("username", "");
    String password = preferences.getString("password", "");

но это не работает.

проблема в том, что перед перезапуском приложения я вижу, что они все еще там. Однако, как только я делаю перезапуск - я в конечном итоге получаю "" (пустую строку) для имени пользователя и "" для пароля.

любые идеи были бы очень признательны

4 ответов


public class MyApplication extends Application {
    private static MyApplication instance;

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate() called");
    }

    public MyApplication() {
        super();
        Log.d(TAG, "Constructor called");
        instance = this;
    }


    public static MyApplication getApplication() {
        if (instance == null) {
            instance = new MyApplication();
        }
        return instance;
    }
}

и использование:

MyApplication.getApplication().getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE)

попробуйте это:

 SharedPreferences preferences = context.getSharedPreferences("YOUR_TAG", 0);
 String username = preferences.getString("username", "");
 String password = preferences.getString("password", "");


  SharedPreferences.Editor editor = preferences.edit();
    editor.putString("username", username).commit();
    editor.putString("password", password).commit();

где контекст-это контекст приложения:

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


        context = this;

Я не знаю точно, что произошло, но после перезапуска эмулятора проблема исчезла.

Извините, что трачу ваше время


у вас есть 2 варианта:

  1. получить общее значение предпочтения в течение жизненного цикла деятельности.

  2. вызов .clear до .commit

смотрите мой ответ:

Android постоянное проверяемое меню в пользовательском виджете после перезагрузки Android