ユーザーが複数のSharedPreferences
ファイルを作成できるようにしていますが、これらのファイルを削除するオプションも必要です。内部ストレージを使用できることはわかっていますが、それは私の質問ではありません。
私の質問は、「コードで、または手動で(クリアするだけでなく)SharedPreferences
ファイルを削除するにはどうすればよいですか?」です。
Context.getSharedPreferences("X")
を介してSharedPreferences
インスタンスを取得した場合、ファイルの名前はX.xml
になります。
/data/data/com.your.package.name/shared_prefs/X.xml
にあります。その場所からそのファイルを削除するだけです。また、/data/data/com.your.package.name/shared_prefs/X.bak
ファイルを確認し、存在する場合は削除してください。
ただし、SharedPreferences
インスタンスはすべてのデータをメモリに保存することに注意してください。したがって、最初に設定をクリアし、変更をコミットしてから、設定のバッキングファイルを削除する必要があります。
これは、設計上の決定を実装するのに十分なはずです。
これは、特定のコンテキストのすべてのSharedPreferencesをクリアする簡単な方法であり、単体テストに役立ちます。
public static void clearSharedPreferences(Context ctx){
File dir = new File(ctx.getFilesDir().getParent() + "/shared_prefs/");
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
// clear each preference file
ctx.getSharedPreferences(children[i].replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
//delete the file
new File(dir, children[i]).delete();
}
}
これをAndroidユニットテストに使用し、Application
クラスで共有設定を使用している場合、競合状態が発生し、正しく機能しない可能性があることに注意してください。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
context.deleteSharedPreferences(preferencesKey);
} else {
try {
FileUtils.cleanDirectory(new File(context.getCacheDir().getParent() + "/shared_prefs/"));
} catch (IOException e) {
Log.e(TAG, "Cannot delete files in shared pref directory", e);
}
}
そのシンプルな天才!
デフォルトのSDカードpreference.xmlファイルパスは次のようになります:/ data/data/your package name/shared_prefs/your shared Preferences xml file。
のように、/ data/data/com.hirecraft.hirecraftmanager/shared_prefs/swipe_preferences.xml。
設定xmlファイルを削除:
File deletePrefFile = new File("/data/data/com.hirecraft.hirecraftmanager/shared_prefs/swipe_preferences.xml");
deletePrefFile.delete();
または、次のような文字列でファイルパスを取得します。
String filePath = getApplicationContext().getFilesDir().getParent()+"/shared_prefs/swipe_preferences.xml";
File deletePrefFile = new File(filePath );
deletePrefFile.delete();