Como guardar preferencias en mi aplicación con SharedPreferences sin usar base de datos

6 mayo, 2013 por Gonzalo de Córdoba Dejar una respuesta »

Objetivo:

Guardar preferencias en mi aplicación sin usar base de datos, de forma que podremos consultar los datos guardados en la misma aplicación, o incluso desde otras, ajustando parámetros.

Para esto, Android dispone de una clase SharedPreferences. Instanciando objetos de la misma, podremos guardar datos en nuestra aplicación para poder consultarlos más tarde.

Esta solución y rápida y muy simple, con lo que ahorraemos muchísimo tiempo. Los datos se guardarán automáticamente en un fichero XML en la ruta de nuestra aplicación con las preferencias en su interior, pero no tenemos que preocuparnos porque lectura y escritura son manejados por la clase SharedPreferences.

Dichas preferencias podrían compartirse con otras aplicaciones si lo deseamos, pasando un parametro a la hora de instanciar el objeto:

  • MODE_PRIVATE: sólo nuestra aplicación podrá leer y escribir datos de configuración en el fichero XML.
  • MODE_WORLD_READABLE: sólo nuestra aplicación podrá escribir datos de configuración, el resto de aplicaciones del dispositivo Android podrá leer los datos de configuración pero no modificarlos.
  • MODE_WORLD_WRITEABLE: todas las aplicaciones del dispositivo Android podrán leer y escribir datos de configuración en el fichero XML.
  • MODE_MULTI_PROCESS: no suele usarse, puede servir cuando la aplicación tiene múltiples procesos (para la comunicación entre ellos).

Antes de poner un ejemplo, es importante saber que la forma adecuada para las llamadas es en los métodos onStart y onDestroy de la aplicación Android, para leer y guardar respectivamente las preferencias.

Para obtener, insertar o modificar preferencias: get o put correspondientes al tipo de dato de cada preferencia.
Por ejemplo getString(“usuario”, “pepito_por_defecto”) accederia al elemento con indice/clave “usuario”. Si no se devuelve valor, pondria por defecto “pepito_por_defecto”.

Creamos un ejemplo completo donde guardamos una cadena en las preferencias al salir de la aplicación, y la leemos al arrancar ésta. Observaremos cómo la primera vez que la arrancamos no está guardada, y las siguientes ya sí. Creamos varias funciones (cargarPreferencias y guardarPreferencias) para hacerlo más entendible.

Código fuente Java:

package sharedpreferences.tutorialandroid.com;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.Toast;

public class TutorialAndroid_SharedPreferencesActivity extends Activity {
String preferencias1;
String preferencias2;
boolean preferenciasGuardadas;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

// al abrir la aplicación, guardamos preferencias
@Override
public void onDestroy(){
super.onDestroy();
guardarPreferencias();
}

// al abrir la aplicación, cargamos preferencias
@Override
protected void onStart() {
super.onStart();
cargarPreferencias();
// para ver el funcionamiento, imprimimos preferencias si existen
String mensaje = "";
if (this.preferenciasGuardadas) {
mensaje = "Las preferencias fueron guardadas ya";
} else {
mensaje = "Las preferencias todavia no se guardaron";
}
Toast.makeText(this, mensaje, Toast.LENGTH_SHORT).show();
}

//guardar configuración aplicación Android usando SharedPreferences
public void guardarPreferencias(){
SharedPreferences prefs = getSharedPreferences("preferenciasMiApp", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("preferenciasGuardadas", true);
editor.putString("preferencia1", "Hola estoy guardando esto");
editor.putString("preferencia2", "y tambien esto");
editor.commit();
Toast.makeText(this, "guardando preferencias", Toast.LENGTH_SHORT).show();
}

//cargar configuración aplicación Android usando SharedPreferences
public void cargarPreferencias(){
SharedPreferences prefs = getSharedPreferences("preferenciasMiApp", Context.MODE_PRIVATE);
this.preferencias1 = prefs.getString("preferencia1", "valor por defecto");
this.preferencias2 = prefs.getString("preferencia1", "valor por defecto");
preferenciasGuardadas = prefs.getBoolean("preferenciasGuardadas", false);

}

Descárgate el código aquí

En el código descargable se encuentra el proyecto completo.

¡Espero que os sirva de ayuda, saludos!

3 comentarios

  1. Sergio dice:

    Hola, muy útil el artículo, pero tengo una duda:

    Por qué las guardas en onDestroy y no en onStop? Teniendo en cuenta que las cargas en onStart en lugar de en onCreate no tendría esto más lógica basándonos en el ciclo de vida de una actividad?

    • berto1989 dice:

      por que en el onDestroy es para cuando la app se libera completamente.

      Osea que se cierra por completo, asi se sabe que se guardan correctamente las ultimas preferencias

  2. lasket dice:

    Buenas, una pregunta existe alguna forma en que esas preferencias sean enviadas a otra actividad?

Deja tu comentario

Rellena el captcha please!! *

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.