Partimos de un ejemplo para explicar cómo podemos guardar un objeto en las preferencias de Android.

1- Lo que haremos es utilizar Gson para serializar el bean como un Json y guardarlo en las preferencias de tu app en Android.

Necesitamos agregar esta dependencia **com.google.code.gson:gson:2.3.1 **en nuestro archivo build.gradle

Encontraras la última numero de versión en https://github.com/google/gson

    dependencies {
       compile fileTree(dir: 'libs', include: ['*.jar'])
       compile 'com.android.support:appcompat-v7:22.2.0'
       compile 'com.google.code.gson:gson:2.3.1'
    }

2-Creamos nuestra clase e indicamos qué atributos serán serializados por Gson

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import com.google.gson.annotations.SerializedName;

/**
* Created by Gustavo Peiretti on 8/5/15.
*/
public class Person {

   @SerializedName("name")
   private String name;

   @SerializedName("mail")
   private String mail;

   // getters and setters
}

3- Ahora crearemos nuestra clase que se encargará de persistir nuestro objeto Person en las preferencias.

Aquí tenemos dos métodos, el primero save() que se encargará de convertir nuestro objeto Person en un String Json y luego lo persistirá en las preferencias dentro del key creado para tal fin.

El segundo método getPerson() buscará utilizando el key y devolverá el objeto, previo a deserializar y convertir el Json en el objeto destino.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

import com.google.gson.Gson;

public class SettingPreferences {

   private static final String PERSON_PREFERENCE_KEY = "PERSON_PREFERENCE_KEY";
   private final Context context;

   public SettingPreferences(Context context) {
       this.context = context;
   }

   public void save(Person person) {
       SharedPreferences.Editor edit = getSharedPreferences().edit();
       String json = new Gson().toJson(person);
       edit.putString(PERSON_PREFERENCE_KEY,json);
       edit.commit();
   }

   public Person getPerson() {
       String json = getSharedPreferences().getString(PERSON_PREFERENCE_KEY,null);
       if(json == null){
return new Person();
       }
       Person person = new Gson().fromJson(json, Person.class);
       return person;
   }

   private SharedPreferences getSharedPreferences(){
       SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
       return preferences;
   }

}

4- Para probar nuestra aplicación crearemos un Activity muy simple donde pediremos que se ingrese nombre y mail, el cual persistiremos y recuperaremos.

Agregaremos a nuestro xml dos EditText y para guardar luego nuestro objeto Person

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
       android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
       android:paddingRight="@dimen/activity_horizontal_margin"
       android:paddingTop="@dimen/activity_vertical_margin"
       android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

       <Button
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="Save"
           android:id="@+id/buttonSave"
           android:layout_centerVertical="true"
           android:layout_alignParentLeft="true"
           android:layout_alignParentStart="true" />

       <EditText
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:id="@+id/editTextName"
           android:layout_alignParentLeft="true"
           android:layout_alignParentStart="true"
           android:layout_marginTop="57dp"
           android:text="Name..."/>

       <EditText
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:id="@+id/editTextMail"
           android:layout_alignParentLeft="true"
           android:layout_alignParentStart="true"
           android:text="Mail..."
           android:layout_below="@+id/editTextName" />

    </RelativeLayout>

Nuestra clase quedará así. Vemos que al iniciar traeremos de las preferencias settingPreferences.getPerson() y setearemos los valores en los EditText lo que nos mostrará en pantalla el ultimo valor seteados de Person.

Por último el método savePerson() se encargará de setear los valores desde el EditText a Person y luego persistirlos en las preferencias.

#android

Android: Guardar Objetos en las Preferencias
1.60 GEEK