Android

Android


5.GUARDAR DATOS CON SharedPreferences

Página 6 de 25

5. GUARDAR DATOS CON SharedPreferences

SharedPreferences es una clase para leer y modificar datos. El código para abrir un fichero de datos asociado a la variable misDatos sería:

SharedPreferences misDatos =

                      getSharedPreferences(fichero,acceso);

donde fichero es el nombre del fichero donde queremos guardar las preferencias, sin extensión. Si el fichero no existe, se crea uno nuevo. El número entero acceso es usualmente 0, indicando fichero privado. Para leer las preferencias se usa el método getString() o también getFloat(), getInt() para leer números.

Para modificar las preferencias se utiliza un Editor, un objeto de la clase SharedPreferences.Editor, que permite escribir datos con sus etiquetas (entre comillas) y salvar el fichero de la siguiente forma:

 SharedPreferences.Editor miEditor=misDatos.edit();

 // escribe los datos

 miEditor.putString("nombre",nombre);

 miEditor.putFloat("x",x);

 miEditor.putFloat("y",y);

 // salvar

 miEditor.commit();      

Para leer las preferencias se utilizaría el siguiente código:

 // Lee en el fichero de preferencias

 nombre=misDatos.getString("nombre","Valor por defecto");

 x=misDatos.getFloat("x", 0);

 y=misDatos.getFloat("y", 0);

donde el segundo parámetro de los métodos getString() y getFloat() es el valor que se devuelve por defecto si el dato no existe.

La siguiente actividad define tres campos para introducir un nombre y dos coordenadas que se guardan en un fichero de preferencias. El fichero se lee al ejecutar la actividad y muestra los valores en los campos de texto. Los datos se guardan en el método onPause(), que se ejecuta cuando la actividad pasa a segundo plano o finaliza. Usamos un Toast para indicar que las preferencias se han guardado.

 public class Preferencias extends Activity {

   SharedPreferences misDatos;

   EditText editNombre,editX,editY;

   String nombre;

   Float x,y;

   @Override

   public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        editNombre=(EditText) findViewById(R.id.nombre);

        editX=(EditText) findViewById(R.id.coordenadaX);

        editY=(EditText) findViewById(R.id.coordenadaY);

        //Abre un fichero de preferencias.

        // El parámetro 0 indica privado

        misDatos= getSharedPreferences("preferencias",0);

        // Lee en el fichero de preferencias

        nombre=misDatos.getString("nombre",

                                  "Valor por     defecto");

        x=misDatos.getFloat("x", 0);

        y=misDatos.getFloat("y", 0);

        // escribe las preferencias en los campos de texto

        editNombre.setText(nombre);

        editX.setText(""+x);

        editY.setText(""+y);

       }

   @Override

   protected void onPause(){

         super.onPause();

         // extrae el contenido de los campos de texto

         nombre=editNombre.getText().toString();

         x=Float.parseFloat(editX.getText().toString());

         y=Float.parseFloat(editY.getText().toString());

         // define un editor para misDatos

         SharedPreferences.Editor miEditor=misDatos.edit();

         // escribe los datos

         miEditor.putString("nombre",nombre);

         miEditor.putFloat("x",x);

         miEditor.putFloat("y",y);

         // salvar

         miEditor.commit();

         Toast.makeText(this,"Preferencias guardadas",1).show();

}

 }

Figura 5.1. Guardar datos con SharedPreferences.

El fichero main.xml correspondiente a esta aplicación es el siguiente:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

       android:background="#ffffdd"

       android:orientation="vertical"

       android:layout_width="fill_parent"

       android:layout_height="fill_parent"

       android:id="@+id/layout1"

      >

<TextView

       android:textSize="24sp"

       android:textColor="#000000"

       android:layout_width="fill_parent"  

       android:layout_height="wrap_content"

       android:text="Introduzca sus preferencias"

       android:id="@+id/text1"

       />

<TextView

       android:textSize="24sp"

       android:textColor="#000000"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="Nombre"

       />

<EditText android:id="@+id/nombre"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="EditText">

</EditText>

<TextView

       android:textSize="24sp"

       android:textColor="#000000"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="Coordenada X:"

       />

<EditText android:id="@+id/coordenadaX"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="EditText">

</EditText>

<TextView

       android:textSize="24sp"

       android:textColor="#000000"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="Coordenada Y:"

       />

<EditText android:id="@+id/coordenadaY"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="EditText">

</EditText>

</LinearLayout>

El resultado se muestra en la figura 5.1. Los datos se guardan cuando se sale de la aplicación, pulsando la tecla home o la tecla de llamada telefónica, por ejemplo. Cuando se vuelve a ejecutar la aplicación los datos guardados se leen y muestran en la pantalla. El fichero con los datos se escribe físicamente en el directorio local de datos de la aplicacion. En el caso del dispositivo virtual, desde ECLIPSE este fichero se puede ver abriendo la perspectiva DDMS. La ruta del fichero de preferencias en mi caso es:

/data/data/es.ugr.amaro.preferencias/shared_prefs/

y el fichero con los datos se llama preferencias.xml.

Este fichero tiene extenxión xml y se puede copiar pulsando la opción "pull a file from the device’’. Su contenido es el siguiente:

<?xml version=‘1.0’ encoding=‘utf-8’ standalone=‘yes’ ?>

<map>

<string name="nombre">amaro</string>

<float name="y" value="200.1" />

<float name="x" value="100.1" />

</map>

Aquí vemos que los valores float, en realidad, se almacenan también como cadenas, lo que manifiesta la relativa utilidad de putFloat(). Es preferible almacenar con putString()y luego convertir las cadenas en números.

Ir a la siguiente página

Report Page