web-dev-qa-db-ja.com

SharedPreferencesファイルを削除する

ユーザーが複数のSharedPreferencesファイルを作成できるようにしていますが、これらのファイルを削除するオプションも必要です。内部ストレージを使用できることはわかっていますが、それは私の質問ではありません。

私の質問は、「コードで、または手動で(クリアするだけでなく)SharedPreferencesファイルを削除するにはどうすればよいですか?」です。

18
Andrew

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インスタンスはすべてのデータをメモリに保存することに注意してください。したがって、最初に設定をクリアし、変更をコミットしてから、設定のバッキングファイルを削除する必要があります。

これは、設計上の決定を実装するのに十分なはずです。

32
inazaruk

これは、特定のコンテキストのすべての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クラスで共有設定を使用している場合、競合状態が発生し、正しく機能しない可能性があることに注意してください。

25
Kirill Kulakov
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);
    }
}
6
ABS

そのシンプルな天才!

デフォルトの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();