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

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:

[sourcecode language=”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);

}
[/sourcecode]

Descárgate el código aquí

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

¡Espero que os sirva de ayuda, saludos!