Como remover algum par chave / valor de SharedPreferences?


89

Como remover algum par chave / valor de SharedPreferences? Eu coloquei e vou remover isso das prefs.

Respostas:


216
SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mySPrefs.edit();
editor.remove(key);
editor.apply();

Aqui, o editor é o editor de Preferências compartilhadas.


11
Um pequeno acréscimo a esta resposta. Da documentação do Android: "Se você não se preocupa com o valor de retorno e está usando-o no thread principal de seu aplicativo, considere usar apply () em seu lugar."
Sreedevi J

3
@silwar, por que você reeditou o apply () de volta para um commit ()? sabendo que a documentação diz para usar apply () a menos que queiramos trabalhar com o valor de retorno, e nem a pergunta nem a resposta se encaixam nesse caso
Mahboubi Salim

13

É 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();

Estive procurando por uma boa explicação (do mundo real) de quando usar commit em vez de aplicar. Isso direciona o ponto claramente.
XMAN

9
SharedPreferences.Editor.remove(key) 
commit();

1
Se você não usar o valor de retorno do método remove, e você está usando isso do thread principal do seu aplicativo, considere usar apply () em vez disso.
kartik srivastava

9

É 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();
}

3

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();

1

Em formação

Basta verificar se a sharedprefclasse é estendida para Mapque é por isso que existe um removemé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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.