Guardar objetos en Shared Preferences

By | 11 mayo 2014

Aunque es cierto de que manera nativa el SharedPreferences no permite guardar objetos complejos, podemos utilizar la técnica de serialización para guardarlos como si se tratase de un tipo String.

Aquí os dejo un ejemplo de como implementarlo.

Por un lado un objecto cualquiera.

public class MyObject implements Serializable {

	private static final long serialVersionUID = 425356831899738508L;

	private int intgr;
	private String strg;

	public int getIntgr() {

		return intgr;
	}

	public void setIntgr(int intgr) {

		this.intgr = intgr;
	}

	public String getStrg() {

		return strg;
	}

	public void setStrg(String strg) {

		this.strg = strg;
	}

}

Y aquí la implementación de la clase que utiliza Jackson2 ObjectMapper para serializar y deserializar MyObject desde SharedPreferences.

public class ObjectStorage {

	private final String USER_PREFS = "objPrefs";
	private SharedPreferences preferences = null;
	private Context context;
	private ObjectMapper objectMapper;

	public ObjectStorage (Context context) {

		this.context = context;
		this.objectMapper = new ObjectMapper();

		this.preferences = context.getSharedPreferences(USER_PREFS,
				Context.MODE_PRIVATE);
	}

    public void saveMyObject(MyObject myObject) {

		Editor editor = this.preferences.edit();

		try {

			editor.putString("myObject", this.objectMapper.writeValueAsString(myObject));
		} catch (JsonProcessingException jpe) {

			Log.e("APPERROR", jpe.getMessage());
		}

		editor.commit();
	}

    public MyObject getMyObject() {

		try {

			return this.objectMapper.readValue(this.preferences.getString("myObject", null), MyObject.class);
		} catch (Exception e) {

			Log.e("APPERROR", e.getMessage());
		}
	}
}

Como veis es muy sencillo y útil a la vez.

Comparte esta entrada enShare on LinkedIn0Tweet about this on Twitter0Share on Facebook0Share on Google+0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *