Risposte:
Per rimuovere valori specifici: SharedPreferences.Editor.remove () seguito da acommit()
Per rimuoverli tutti SharedPreferences.Editor.clear()
seguiti da acommit()
Se non ti interessa il valore restituito e lo stai utilizzando dal thread principale dell'applicazione, prendi in considerazione l'utilizzo apply()
.
La mia soluzione:
SharedPreferences preferences = getSharedPreferences("Mypref", 0);
preferences.edit().remove("text").commit();
"text"
.
Rimozione di tutte le preferenze:
SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();
Rimozione della preferenza singola:
SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().remove("KeyName").commit();
KeyName
?
Se non è necessario rimuoverlo ogni volta, è possibile rimuoverlo manualmente da:
Impostazioni -> Applicazioni -> Gestisci applicazioni -> (scegli la tua app) -> Cancella dati o Disinstalla
Versioni più recenti di Android:
Impostazioni -> Applicazioni -> (scegli la tua app) -> Archiviazione -> Cancella dati e Cancella cache
Eliminazione delle preferenze condivise Android in una riga :-)
context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit();
O apply
per operazioni asincrone non bloccanti:
this.getSharedPreferences("YOUR_PREFS", 0).edit().clear().apply();
Sembra che tutte le soluzioni non funzionino completamente o siano completamente morte
per cancellare tutte le preferenze condivise in un'attività
PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().clear().apply();
Chiamalo dall'attività principale dopo onCreate
nota * ho usato .apply()
invece di .commit()
, sei libero di scegliere commit ();
Puoi usare la shell adb per farlo anche senza un telefono rootato. L'unico problema è che l'app deve essere debuggabile.
run-as <your package name> <command>
Per esempio:
run-as com.asdf.blah rm /data/data/com.asdf.blah/databases/myDB.db
In alternativa, puoi fare quanto sopra, ma senza il comando che ti indirizzerà alla radice del pacchetto dell'app e ti consentirà di eseguire più comandi nel contesto dell'app.
run-as
. Penseresti che l'avrei trovato dopo 3 anni ...
Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();
A partire da API 24 (Nougat) puoi semplicemente fare:
context.deleteSharedPreferences("YOUR_PREFS");
Tuttavia, non esiste alcuna compatibilità con le versioni precedenti, quindi se stai supportando qualcosa di meno di 24, segui:
context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply();
Cancella tutto:
PreferenceManager.getDefaultSharedPreferences(context).edit().clear().apply()
Puoi anche disinstallare manualmente la tua app utilizzando il tuo dispositivo. Quindi, quando reinstalli l'app, le preferenze condivise sono state ripristinate.
Nelle definizioni di classe:
private static final String PREFERENCES = "shared_prefs";
private static final SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(PREFERENCES, MODE_PRIVATE);
All'interno della classe:
public static void deleteAllSharedPrefs(){
sharedPreferences.edit().clear().commit();
}
Prova questo codice:
SharedPreferences sharedPreferences = getSharedPreferences("fake", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.clear().commit();
SharedPreferences.Editor remove (String key) seguito da un commit () o un apply ()
Per rimuovere tutti i valori,
SharedPreferences.Editor clear () seguito da un commit () o un apply ()
Per rimuovere le coppie di valori chiave dalle preferenze, è possibile effettuare facilmente le seguenti operazioni
getActivity().getSharedPreference().editor().remove("key").apply();
Ho anche sviluppato una libreria per una facile manipolazione delle preferenze condivise. È possibile trovare il seguente link
Per cancellare tutte le condivisioni condivise centralmente da qualsiasi classe:
public static SharedPreferences.Editor getEditor(Context context) {
return getPreferences(context).edit();
}
E poi da qualsiasi classe: (commit restituisce un valore booleano in cui è possibile verificare se le Preferenze sono state cancellate o meno)
Navigation.getEditor(this).clear().commit();
Oppure puoi usare applicare; ritorna vuoto
Navigation.getEditor(this).clear().apply();
new File(context.getFilesDir(), fileName).delete();
Posso eliminare il file nelle preferenze condivise con esso
Nessuna delle risposte funziona per me poiché ho molte chiavi delle preferenze condivise.
Supponiamo che tu stia eseguendo un Android Test anziché un unit test.
Funziona per me loop ed elimina tutti i file shared_prefs .
@BeforeClass verrà eseguito prima di tutti i test e 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();
}
}
Il modo kotx di Kotlin per cancellare tutte le preferenze:
val prefs: SharedPreferences = getSharedPreferences("prefsName", Context.MODE_PRIVATE)
prefs.edit(commit = true) {
clear()
}
Fare clic qui per tutte le operazioni relative alle preferenze condivise con esempi
È possibile utilizzare preferences.edit().remove("key").commit()
per eliminare i valori salvati dalle preferenze condivise.
L'ho fatto stamattina. Da un prompt dei comandi:
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
NOTA : ciò richiede un dispositivo rooted come i dispositivi virtuali Android stock, un dispositivo Genymotion o un vero telefono / tablet rooted, ecc.
/data/data
direttamente!
su
dopo adb shell
per aprire una shell privilegiata.