Como remover algum par chave / valor de SharedPreferences? Eu coloquei e vou remover isso das prefs.
Respostas:
SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mySPrefs.edit();
editor.remove(key);
editor.apply();
Aqui, o editor é o editor de Preferências compartilhadas.
É importante observar que, a menos que você esteja planejando fazer algo com o valor de retorno da chamada commit (), não há absolutamente nenhuma razão para usar a chamada síncrona commit () em vez da chamada assíncrona apply ().
Lembre-se de que, se você estiver chamando isso do thread principal / da IU, a IU é bloqueada até que o commit () seja concluído. Isso pode levar mais de cerca de 100 ms, em comparação com cerca de 5 ms para a aplicação. Isso pode não parecer muito, mas se for feito continuamente ao longo de um aplicativo, certamente irá somar.
Então, a menos que você esteja planejando fazer algo assim, espero que em um tópico separado:
editor.remove(String key);
boolean success = editor.commit();
if (!success) {
// do something
}
Em vez disso, você deveria fazer o seguinte:
editor.remove(String key);
editor.apply();
SharedPreferences.Editor.remove(key)
commit();
É muito simples:
private SharedPreferences sharedPreferences() {
return PreferenceManager.getDefaultSharedPreferences(mContext);
}
public void clearSharedPreferences() {
sharedPreferences()
.edit()
.remove(SOME_KEY_1)
.remove(SOME_KEY_2)
.remove(SOME_KEY_3)
.apply();
}
Aqui está como abordei esse problema.
Primeiro criei uma instância de SharedPreference como
SharedPreferences mobilePreference;
então usei este sharedPreference como
mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
Aqui, "in.bhartisoftwares.amit.allamitappsthree" é o nome do meu pacote e estou usando Context.MODE_PRIVATE, porque desejo manipular essa preferência compartilhada apenas para este nome de pacote.
Em seguida, estou excluindo o sharedPreference selecionado (a chave de meu sharedPreference é mobileString) da seguinte maneira:
mobilePreference.edit().remove("mobileString").commit();
Veja o código completo abaixo:
SharedPreferences mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
mobilePreference.edit().remove("mobileString").commit();
Em formação
Basta verificar se a sharedpref
classe é estendida para Map
que é por isso que existe um remove
método
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.remove(String key);
editor.apply();
Aqui, o editor é o editor de Preferências compartilhadas.