2012-01-06 21 views
31

estoy creando Preferencias compartidos de este modoandroide: comprobar si existe valor en Preferencias del compartidas

preferences = getSharedPreferences("text", 0); 
final Editor editor = preferences.edit(); 

String s1 = serverIP.getText().toString(); 
String s2 = serverPort.getText().toString(); 
String s3 = syncPass.getText().toString(); 
String s4 = proxyServer.getText().toString(); 
String s5 = proxyPort.getText().toString(); 

editor.putString("SERVERIP", s1); 
editor.putString("SERVERPORT", s2); 
editor.putString("SYNCPASS", s3); 
editor.putString("PROXYSERVER", s3); 
editor.putString("PROXYPORT", s3); 

y onCreate Quiero mostrar los valores en un nuevo conjunto de TextViews, pero la primera vez que no lo hacen tener cualquier valor almacenado en las preferencias compartidas y obtendrá una excepción de puntero nulo.

Así que quiero saber si hay algún método incorporado que pueda verificar si las preferencias compartidas contienen algún valor o no, de modo que pueda verificar si el valor existe y si no, reemplace el nuevo conjunto de TextViews con el valor de las preferencias.

Respuesta

106

Trate contains(String key) Accorting a la Javadocs,

Comprueba si las preferencias contienen una preferencia. Devuelve verdadero si existe la preferencia en las preferencias, de lo contrario es falso.

+8

esto debe aceptarse respuesta –

+2

de acuerdo, esta es la respuesta correcta – smoothumut

-1

¿Por qué no solo usa el bloque try-catch?
Si tiene los valores establecidos y no arroja la excepción NULL Pointer, se los mostrará al usuario. De lo contrario, irá al bloque catch donde manejaría la carga de la aplicación por primera vez. Sé que no es un "método incorporado", pero haría el trabajo.
¡Que tengas un buen día!

+0

Este trabajo does'n pal ... por alguna razón se dice que doesn ir a la captura en absoluto – Vivekanand

20

Cada método para obtener los valores de SharedPreferences tiene un valor por defecto que se devuelve en caso de que la clave no existe

preferences = getSharedPreferences("text", 0); 
String value = preferences.getString("unknown_key",null); 
if (value == null) { 
    // the key does not exist 
} else { 
    // handle the value 
} 
+1

Esto es correcto, pero lo que si existe la clave, pero el valor está vacío/null? Ejemplo: Kevin

+49

Aunque esta es la respuesta aceptada, estoy bastante seguro de que lo que el autor * realmente * estaba buscando era 'preferences.contains (" unknown_key ");' ... Por ejemplo, si tiene una preferencia booleana, obviamente puede ser verdadera o falsa; si le da un valor predeterminado, lo devolverá si no existe, a pesar de que podría ser un valor real posible, por lo que realmente no le diría si la preferencia existe o no. – fatfreddyscat

+2

Respuesta engañosa - en realidad 'prefsEditor.putString (" ahora la clave existe ", nulo) .Comermit();' es perfectamente legal, la clave existe y el valor es nulo - -1 –

9

Pruebe

SharedPreferences shf = getSharedPreferences("NAME_SharedPref", MODE_WORLD_READABLE); 
    String strPref = shf.getString("SERVERIP", null); 

    if(strPref != null) { 
    // do some thing 

    } 
+0

buena respuesta Richa – Android

+0

¿Qué pasa si quiero verificar? valor int? –

0
LoadRuns(); 
if (loadedruns == 1) { 
Toast.makeText(MainActivity.this, "First run", Toast.LENGTH_SHORT).show(); 
} 
else { 
Toast.makeText(MainActivity.this, "No. runs: " + loadedruns, 
Toast.LENGTH_SHORT).show(); 
} 
loadedruns++; 
SaveRuns("runs", loadedruns); 


    public void SaveRuns(String key, int value){ 
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
SharedPreferences.Editor editor = sharedPreferences.edit(); 
editor.putInt(key, value); 
editor.commit(); 
} 
public void LoadRuns(){ 
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
loadedruns = sharedPreferences.getInt("runs", 1); 
} 
+0

Agregue un contexto de por qué funciona este código. Hace la respuesta mejor y más útil. ¡Gracias! :) – Alex

Cuestiones relacionadas