SharedPreferencesからいくつかのキー/値のペアを削除するにはどうすればよいですか?私はそれを設定から削除しました。
回答:
SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mySPrefs.edit();
editor.remove(key);
editor.apply();
ここで、エディターはsharedPreferencesエディターです。
commit()呼び出しの戻り値を使用して何かを行う予定がない限り、非同期のapply()呼び出しの代わりに同期のcommit()呼び出しを使用する理由はまったくないことに注意してください。
これをメイン/ UIスレッドから呼び出す場合、commit()が完了するまでUIはブロックされることに注意してください。これは、適用の約5ミリ秒とは対照的に、約100ミリ秒以上かかる場合があります。それほど多くはないように思われるかもしれませんが、アプリケーション全体で継続的に実行すると、確実に合計されます。
したがって、このようなことを計画しているのでない限り、できれば別のスレッドで:
editor.remove(String key);
boolean success = editor.commit();
if (!success) {
// do something
}
代わりにこれを行う必要があります:
editor.remove(String key);
editor.apply();
SharedPreferences.Editor.remove(key)
commit();
それは非常に簡単です:
private SharedPreferences sharedPreferences() {
return PreferenceManager.getDefaultSharedPreferences(mContext);
}
public void clearSharedPreferences() {
sharedPreferences()
.edit()
.remove(SOME_KEY_1)
.remove(SOME_KEY_2)
.remove(SOME_KEY_3)
.apply();
}
これが私がこの問題に取り組んだ方法です。
まず、SharedPreferenceのインスタンスを次のように作成しました
SharedPreferences mobilePreference;
次に、このsharedPreferenceを次のように使用しました
mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
ここで、「in.bhartisoftwares.amit.allamitappsthree」は私のパッケージ名であり、このパッケージ名に対してのみこの共有設定を操作したいので、Context.MODE_PRIVATEを使用しています。
次に、選択したsharedPreference(sharedPreferenceのキーはmobileString)を次のように削除します。
mobilePreference.edit().remove("mobileString").commit();
以下の完全なコードを参照してください。
SharedPreferences mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
mobilePreference.edit().remove("mobileString").commit();