回答:
特定の値を削除するには:SharedPreferences.Editor.remove()の後にcommit()
それらをすべて削除してSharedPreferences.Editor.clear()
から、commit()
戻り値を気にせず、アプリケーションのメインスレッドからこれを使用している場合は、apply()
代わりに使用することを検討してください。
私の解決策:
SharedPreferences preferences = getSharedPreferences("Mypref", 0);
preferences.edit().remove("text").commit();
"text"
。
すべての設定を削除:
SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();
単一設定の削除:
SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().remove("KeyName").commit();
KeyName
か?
毎回削除する必要がない場合は、次の場所から手動で削除できます。
設定->アプリケーション->アプリケーションの管理->(アプリを選択)->データの消去またはアンインストール
Androidの新しいバージョン:
設定->アプリケーション->(アプリを選択)->ストレージ->データのクリアとキャッシュのクリア
1行でAndroid共有設定を削除する:-)
context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit();
またはapply
非ブロッキング非同期操作の場合:
this.getSharedPreferences("YOUR_PREFS", 0).edit().clear().apply();
すべてのソリューションが完全に機能していないか、完全に機能していないようです
アクティビティ内のすべてのSharedPreferencesをクリアする
PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().clear().apply();
onCreate後にメインアクティビティからこれを呼び出します
注*私はの.apply()
代わりに使用しました.commit()
。commit()を自由に選択できます。
ルート化された電話がなくても、adbシェルを使用してこれを行うことができます。唯一の問題は、アプリがデバッグ可能でなければならないことです。
run-as <your package name> <command>
例えば:
run-as com.asdf.blah rm /data/data/com.asdf.blah/databases/myDB.db
または、上記を実行することもできますが、アプリパッケージのルートに移動し、アプリのコンテキストでさらに多くのコマンドを実行できるようにするコマンドは必要ありません。
run-as
です。私はこれを3年後に見つけたと思います...
Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();
デバイスを使用して手動でアプリをアンインストールすることもできます。その後、アプリを再インストールすると、共有設定がリセットされました。
クラス定義では:
private static final String PREFERENCES = "shared_prefs";
private static final SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(PREFERENCES, MODE_PRIVATE);
クラス内:
public static void deleteAllSharedPrefs(){
sharedPreferences.edit().clear().commit();
}
キー値のペアを設定から削除するには、次の操作を簡単に実行できます
getActivity().getSharedPreference().editor().remove("key").apply();
共有設定を簡単に操作するためのライブラリも開発しました。あなたは次のリンクを見つけるかもしれません
すべてのSharedPreferencesをクラスから一元的にクリアするには:
public static SharedPreferences.Editor getEditor(Context context) {
return getPreferences(context).edit();
}
そして、任意のクラスから:(commitはブール値を返し、設定がクリアされたかどうかを確認できます)
Navigation.getEditor(this).clear().commit();
または、applyを使用できます。それは無効を返します
Navigation.getEditor(this).clear().apply();
私は多くの共有設定キーを持っているので、答えはどれもうまくいきません。
単体テストの代わりにAndroidテストを実行しているとしましょう。
それは私のために働いており、すべてのshared_prefsファイルをループして削除します。
@BeforeClassはすべてのテストとActivityTestRuleの前に実行されます
@BeforeClass
public static void setUp() {
Context context = InstrumentationRegistry.getTargetContext();
File root = context.getFilesDir().getParentFile();
String[] sharedPreferencesFileNames = new File(root, "shared_prefs").list();
for (String fileName : sharedPreferencesFileNames) {
context.getSharedPreferences(fileName.replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
}
}
Kotlin KTXする方法すべてクリア好みを:
val prefs: SharedPreferences = getSharedPreferences("prefsName", Context.MODE_PRIVATE)
prefs.edit(commit = true) {
clear()
}
すべての共有設定操作と例については、ここをクリックしてください
を使用preferences.edit().remove("key").commit()
して、保存された値を共有設定から削除できます。
今朝ちょうどこれをやった。コマンドプロンプトから:
adb shell
cd /data/data/YOUR_PACKAGE_NAME/shared_prefs
rm * // to remove all shared preference files
rm YOUR_PREFS_NAME.xml // to remove a specific shared preference file
注:これには、標準のAndroid仮想デバイス、Genymotionデバイス、実際のルート化されたハンドセット/タブレットなどのルート化されたデバイスが必要です。
/data/data
直接アクセスするには、ルート化された電話が必要です。
su
後で実行する必要がありadb shell
ます。