¿Cómo eliminar algún par clave / valor de SharedPreferences?

90

¿Cómo eliminar algún par clave / valor de SharedPreferences? He puesto y quito eso de las preferencias.

Damir
fuente

Respuestas:

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

Aquí el editor es el editor de preferencias compartidas.

Yashwanth Kumar
fuente
11
Una pequeña adición a esta respuesta. De la documentación de Android: "Si no le importa el valor de retorno y lo está usando desde el hilo principal de su aplicación, considere usar apply () en su lugar.
Sreedevi J
3
@silwar, ¿por qué ha reeditado apply () de nuevo a un commit ()? sabiendo que la documentación dice usar apply () a menos que queramos trabajar con el valor de retorno, y ni la pregunta ni la respuesta encajan en ese caso
Salim Mahboubi
13

Es importante tener en cuenta que, a menos que esté planeando hacer algo con el valor de retorno de la llamada commit (), no hay absolutamente ninguna razón para usar la llamada commit () sincrónica en lugar de la llamada apply () asincrónica.

Tenga en cuenta que si está llamando a esto desde el hilo principal / UI, la UI se bloquea hasta que se complete el commit (). Esto puede tardar más de unos 100 ms en comparación con unos 5 ms para la aplicación. Puede que no parezca mucho, pero si se hace continuamente a lo largo de una aplicación, sin duda se sumará.

Entonces, a menos que esté planeando hacer algo como esto, con suerte en un hilo separado:

editor.remove(String key); 
boolean success = editor.commit();
if (!success) { 
    // do something 
}

En su lugar, deberías estar haciendo esto:

editor.remove(String key); 
editor.apply();
SBerg413
fuente
He estado buscando por todas partes una buena explicación (del mundo real) de cuándo usar la confirmación frente a la aplicación. Esto explica claramente el punto.
XMAN
9
SharedPreferences.Editor.remove(key) 
commit();
Shailendra Singh Rajawat
fuente
1
Si no usa el valor de retorno del método remove, y lo está usando desde el hilo principal de su aplicación, considere usar apply () en su lugar.
kartik srivastava
9

Es muy simple:

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();
}
Antônio Sérgio Ferraz
fuente
3

Así es como abordé este problema.

Primero creé una instancia de SharedPreference como

SharedPreferences mobilePreference;

entonces usé esta sharedPreference como

mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);

Aquí "in.bhartisoftwares.amit.allamitappsthree" es el nombre de mi paquete y estoy usando Context.MODE_PRIVATE, porque quiero manipular esta preferencia compartida solo para este nombre de paquete.

Luego, estoy eliminando la sharedPreference seleccionada (la clave de mi sharedPreference es mobileString) de la siguiente manera:

mobilePreference.edit().remove("mobileString").commit();

Vea el código completo a continuación:

SharedPreferences mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
    mobilePreference.edit().remove("mobileString").commit();
Amit Mhaske
fuente
1

Información

Solo verifique que la sharedprefclase se extienda a Mappor eso hay un removemétodo

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.remove(String key);
editor.apply();

Aquí el editor es el editor de preferencias compartidas.

Yogesh Rathi
fuente