Android – SharedPreferences con objeto serializable

Sé que SharedPreferences tiene putString() , putFloat() , putLong() , putInt() y putBoolean() . Pero necesito almacenar un objeto que sea del tipo Serializable en SharedPreferences . ¿Cómo puedo conseguir esto?

En resumen usted no puede, intente serializar su objeto a un archivo privado, él asciende a la misma cosa. Ejemplo de clase a continuación:

 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import android.app.Activity; import android.content.Context; /** * * Writes/reads an object to/from a private local file * * */ public class LocalPersistence { /** * * @param context * @param object * @param filename */ public static void witeObjectToFile(Context context, Object object, String filename) { ObjectOutputStream objectOut = null; try { FileOutputStream fileOut = context.openFileOutput(filename, Activity.MODE_PRIVATE); objectOut = new ObjectOutputStream(fileOut); objectOut.writeObject(object); fileOut.getFD().sync(); } catch (IOException e) { e.printStackTrace(); } finally { if (objectOut != null) { try { objectOut.close(); } catch (IOException e) { // do nowt } } } } /** * * @param context * @param filename * @return */ public static Object readObjectFromFile(Context context, String filename) { ObjectInputStream objectIn = null; Object object = null; try { FileInputStream fileIn = context.getApplicationContext().openFileInput(filename); objectIn = new ObjectInputStream(fileIn); object = objectIn.readObject(); } catch (FileNotFoundException e) { // Do nothing } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { if (objectIn != null) { try { objectIn.close(); } catch (IOException e) { // do nowt } } } return object; } } 

Si el objeto es simple POJO puede convertir objeto a cadena JSON y guardarlo en las preferencias compartidas con putString ().

Es posible hacerlo sin un archivo.

Estoy serializando la información a base64 y como esto soy capaz de guardarlo como una cadena en las preferencias.

El siguiente código es Serializar un objeto serializable a la cadena base64 y viceversa: import android.util.Base64;

 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class ObjectSerializerHelper { static public String objectToString(Serializable object) { String encoded = null; try { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(object); objectOutputStream.close(); encoded = new String(Base64.encodeToString(byteArrayOutputStream.toByteArray(),0)); } catch (IOException e) { e.printStackTrace(); } return encoded; } @SuppressWarnings("unchecked") static public Serializable stringToObject(String string){ byte[] bytes = Base64.decode(string,0); Serializable object = null; try { ObjectInputStream objectInputStream = new ObjectInputStream( new ByteArrayInputStream(bytes) ); object = (Serializable)objectInputStream.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (ClassCastException e) { e.printStackTrace(); } return object; } } 

La respuesta aceptada es engañosa, podemos almacenar objeto serializable en SharedPreferences usando GSON. Lea más sobre ello en google-gson .

Puede agregar GSON dependencia en el archivo Gradle con:

 compile 'com.google.code.gson:gson:2.7' 

Aquí el fragmento:

Primero, crea tus preferencias compartidas usuales:

 //Creating a shared preference SharedPreferences mPrefs = getPreferences(MODE_PRIVATE); 

Ahorro de objeto serializable a preferencia:

  Editor prefsEditor = mPrefs.edit(); Gson gson = new Gson(); String json = gson.toJson(YourSerializableObject); prefsEditor.putString("SerializableObject", json); prefsEditor.commit(); 

Obtenga un objeto serializable de preferencia:

 Gson gson = new Gson(); String json = mPrefs.getString("SerializableObject", ""); yourSerializableObject = gson.fromJson(json, YourSerializableObject.class); 
  • Android: ¿Configurar las preferencias compartidas durante la instalación?
  • Activa / desactiva Toast desde las preferencias compartidas?
  • Obtener todos los nombres SharedPreferences y todas sus claves?
  • SharedPreferences en BroadcastReceiver parece no actualizar?
  • Cómo guardar notificaciones push de analizar por SharedPreferences
  • Android: Mantenga el nombre de usuario en sesión hasta que se cierre la sesión
  • Android - SharedPreferences a través de perfiles
  • ¿La aplicación de actualización borra las preferencias compartidas o elimina las alarmas establecidas por la aplicación?
  • Preferencias compartidas dentro de broadcastreceiver
  • Prueba de unidad de Android: cómo borrar SharedPreferences
  • Recuperación de valores de prefrences compartidos en otra actividad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.