Question

How do I delete SharedPreferences data for my application?

I'm creating an application that uses a lot of web services to sync data. For testing purposes I need to wipe out some SharedPreferences values when I restart the app.

Was it helpful?

Solution

To remove specific values: SharedPreferences.Editor.remove() followed by a commit()

To remove them all SharedPreferences.Editor.clear() followed by a commit()

If you don't care about the return value and you're using this from your application's main thread, consider using apply() instead.

OTHER TIPS

My solution:

SharedPreferences preferences = getSharedPreferences("Mypref", 0);
preferences.edit().remove("text").commit();

Removing all preferences:

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();

Removing single preference:

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().remove("KeyName").commit();

If it's not necessary to be removed every time, you can remove it manually from:

Settings -> Applications -> Manage applications -> (choose your app) -> Clear data or Uninstall

Newer versions of Android:

Settings -> Applications -> (choose your app) -> Storage -> Clear data and Clear cache

Deleting Android Shared Preferences in one line :-)

context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit();

Or apply for non-blocking asynchronous operation:

this.getSharedPreferences("YOUR_PREFS", 0).edit().clear().apply();

Seems that all solution is not completely working or out-dead

to clear all SharedPreferences in an Activity

      PreferenceManager.getDefaultSharedPreferences(getBaseContext()).
      edit().clear().apply();

Call this from the Main Activity after onCreate

note* i used

.apply()

instead of

.commit()

you are free to choose commit();

You can use the adb shell to do this even without a rooted phone. The only catch is that the app must be debuggable.

run-as <your package name> <command>

For example:

run-as com.asdf.blah rm /data/data/com.asdf.blah/databases/myDB.db

Alternatively, you can just do the above but without the command which will direct you to the app package root and allow you to execute more commands in the app's context.

Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();

Clear them all:

PreferenceManager.getDefaultSharedPreferences(context).edit().clear().apply()

in the class definitions

private static final String PREFERENCES = "shared_prefs";

private static final SharedPreferences sharedPreferences  = getApplicationContext().getSharedPreferences(PREFERENCES, MODE_PRIVATE);

inside the class

public static void deleteAllSharePrefs(){
        sharedPreferences.edit().clear().commit();
      }

Try this code:

SharedPreferences sharedPreferences = getSharedPreferences("fake", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.clear().commit();

As of API 24 (Nougat) you can just do:

context.deleteSharedPreferences("YOUR_PREFS");

However, there is no backward compatibility, so if you're supporting anything less than 24, stick with:

context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply(); 

You can also just manually uninstall your app using your device. Then when you re-install your app, shared preferences have been reset.

If it is for your testing. You can use adb commands.

adb shell pm clear <package name>
  • To remove a particular value,

SharedPreferences.Editor remove(String key) followed by a commit() or a apply()

  • To remove all the values,

    SharedPreferences.Editor clear() followed by a commit() or a apply()

String prefTag = "someTag";
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
prefs.edit().remove(prefTag).commit();

This will delete the saved shared preferences with the name "someTag".

To Clear all SharedPreferences centrally from any class:

public static SharedPreferences.Editor getEditor(Context context) {
    return getPreferences(context).edit();
}

An then from any class:(Commit return Boolean whhere you can check whether your Preferences cleared or not)

        Navigation.getEditor(this).clear().commit();

Or: you can use Apply: it returns void Navigation.getEditor(this).clear().apply();

To remove the key value pairs from preference, you can easily do the following

getActivity().getSharedPreference().editor().remove("key").apply();

I have also developed library for easy manipulation of shared preferences. You may find the following link

https://github.com/farruhha/SimplePrefs

None of the answers work for me since I have many shared preferences keys.

Let's say you are running an Android Test instead of a unit test.

It is working for me loop and delete through all the shared_prefs files.

@BeforeClass will run before all the tests and 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();
    }
}
new File(context.getFilesDir(), fileName).delete();

I can delete file in shared preferences with it

You can use-> preferences.edit().remove("key").commit(); to delete saved value from shared preferences.

Just did this this morning. From a command prompt:

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

NOTE: This requires a rooted device such as the stock Android virtual devices, a Genymotion device, or an actual rooted handset/tablet, etc.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top