не работает функция очистки android sharedPreferences - PullRequest
0 голосов
/ 05 июля 2018

Очистка моего префа не работает.

Это мой PreferencManager.java

public class PreferenceManager {
  private static final String PREF_NAME = "my_prefs.xml";

  private static PreferenceManager instance;
  private SharedPreferences mPrefs;
  private SharedPreferences.Editor mEditor;

  public static PreferenceManager getInstance(Context context) {
      if (instance == null) {
          instance = new PreferenceManager(context);
      }
      return instance;
  }


  private PreferenceManager(Context context) {
      mPrefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
      mEditor = mPrefs.edit();
  }

  private static final String UUID = "UUID";
  private String uuid = "";

  public void setUuid(String key) {
      this.uuid = key;
      clear(UUID);
      mEditor.putString(UUID, key);
      mEditor.commit();
  }

  public String getUuid() {
      if (uuid.equals("")) {
          uuid = mPrefs.getString(UUID, "");
      }
      return uuid;
  }
  //clear
  public void clear(String key) {
      mEditor.remove(key);
      mEditor.commit();
  }
  public void allClear(){
      mEditor = mPrefs.edit();
      mEditor.clear();
      mEditor.commit();
  }
}

Когда я использую это в своей деятельности, как это

PreferenceMangaer.getInstance(getApplicationContext).setUUID("ok");

или

String result= PreferenceMangaer.getInstance(getApplicationContext).getUUID;

Когда я отлаживаю, clear (UUID) не работает и allClear также. Почему это доза не работает?

Я пробую и commit (), и apply ().

Я жду вашей помощи Спасибо

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

используйте клавишу и функцию редактора.

    SharedPreferences Prefs =PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = Prefs.edit();
    editor.remove(String key);
    editor.apply()
0 голосов
/ 06 июля 2018

Вы также не очистили свой глобальный uuid.

  public void allClear(){
      this.uuid = ""; // Clears the global uuid.
      mEditor = mPrefs.edit();
      mEditor.clear();
      mEditor.commit();
  }

Так вот почему ваш getUuid получает тот же результат, что и раньше.

Вам не нужно хранить локальную ссылку uuid.

  private static final String UUID = "UUID";

  public void setUuid(String key) {
      mEditor.putString(UUID, key);
      mEditor.apply(); // better use apply() instead commit()
  }

  public String getUuid() {
      return mPrefs.getString(UUID, "");
  }

  //clear
  public void clear(String key) {
      mEditor.remove(key);
      mEditor.apply();
  }
  public void allClear(){
      mEditor.clear();
      mEditor.apply(); 
  }
...