Sharedpreferences очищается только частично

#android

#Android

Вопрос:

Я пытаюсь загрузить последнее открытое действие после закрытия приложения. Приведенный ниже код делает это. Теперь я пытаюсь выполнить сброс при нажатии кнопки, чтобы он очистил файл sharedpref и вернулся к mainactivity. Но метод clear() очищает только те значения, которые передаются из mainactivity, и не удаляет значение ключа lastactivity из файла настроек.Поэтому при нажатии кнопки сброса приложение зависает с белым экраном.Пытался удалить () только отдельное значение ключа lastactivity, но не сработало. Также пробовал apply() вместо использования commit() .Что я делаю неправильно.

РЕДАКТИРОВАТЬ: я удалил finish() метод и передал intent в mainactivity класс. Теперь при нажатии кнопки сброса белый экран зависает и загружается mainactivity . Но все же lastactivity значение не удаляется из файла настроек. Теперь после принудительного закрытия и при открытии приложения оно загружается secondactivity со defaultName значениями as вместо загрузки mainactivity .

SecondActivity

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

setContentView(R.layout.activity_main2);

TextView textView1  = (TextView) findViewById(R.id.textView1);
textView1.setText("Spinner 1");
TextView textView2  = (TextView) findViewById(R.id.textView2);
textView2.setText("Spinner 2");

SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
       spinnerValue = prefs.getString("spinnerValue", "defaultName");
       spinnerValue2 = prefs.getString("spinnerValue2", "defaultName");

TextView textView5  = (TextView) findViewById(R.id.textView5);
       textView5.setText(spinnerValue);       
TextView textView6  = (TextView) findViewById(R.id.textView6);
       textView6.setText(spinnerValue2);  

Button resetButton = (Button) findViewById(R.id.end);
resetButton.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        finish();
        clear();

      }

    });
  }

@Override
protected void onPause() {
    super.onPause();

    SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
    Editor editor = prefs.edit();
    editor.putString("lastActivity", getClass().getName());
    editor.commit();
}

public void clear(){
    SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
        Editor editor = prefs.edit();

    //editor.remove("lastActivity");
    //editor.commit(); 

    editor.clear();
    editor.commit();
}
}
  

Обновить:

      boolean donotexecutecode = true;

@Override
          public void onClick(View view) {
            donotexecutecode = false;
              clear();
              finish();
          }
    @Override
        protected void onPause() {
            super.onPause();
                SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
            if (donotexecutecode) {
            Editor editor = prefs.edit();
            editor.putString("lastActivity", getClass().getName());
            editor.commit();
            }
                return;
            }
    public void clear(){
                SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
                editor.clear(); 
        editor.commit(); 
    }
  

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

1. В чем была проблема с удалением? Для меня это работает отлично.

2. по щелчку второе действие закрывается, появляется белый экран и зависает

3. Попробуйте изменить последовательность: finish(); clear(); на clear(); finish();

4. Уже пробовал эти варианты.

5. Тогда не могли бы вы прикрепить свой logcat?

Ответ №1:

По-видимому onPause() , вызывается после clear(); . Поэтому вы всегда ставите этот ключ. Вы должны использовать логический флаг, чтобы не выполнять код в onPause, если вы хотите принудительно finish() .

Ответ №2:

попробуйте SharedPreferences.Редактор вместо только редактора.

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

1. Это не имеет значения, если оно импортируется SharedPreferences . Редактор