ArrayList de Android de objetos personalizados – Guardar en SharedPreferences – ¿Serializable?

Tengo una ArrayList de un objeto. El objeto contiene los tipos ‘Bitmap’ y ‘String’ y luego solo getters y setters para ambos. En primer lugar es Bitmap serializable?

¿Cómo voy a serializar esto para almacenarlo en SharedPreferences? He visto a muchas personas hacer una pregunta similar, pero ninguna parece dar una buena respuesta. Preferiría algunos ejemplos de código si es posible.

Si el bitmap no es serializable, ¿cómo hago para almacenar este ArrayList?

muchas gracias.

Sí, puede guardar su objeto compuesto en preferencias compartidas. Digamos..

  Student mStudentObject = new Student(); SharedPreferences appSharedPrefs = PreferenceManager .getDefaultSharedPreferences(this.getApplicationContext()); Editor prefsEditor = appSharedPrefs.edit(); Gson gson = new Gson(); String json = gson.toJson(mStudentObject); prefsEditor.putString("MyObject", json); prefsEditor.commit(); 

..y ahora puedes recuperar tu objeto como:

  SharedPreferences appSharedPrefs = PreferenceManager .getDefaultSharedPreferences(this.getApplicationContext()); Gson gson = new Gson(); String json = appSharedPrefs.getString("MyObject", ""); Student mStudentObject = gson.fromJson(json, Student.class); 

Para más información, haga clic aquí.

Si desea recuperar una ArrayList de cualquier tipo de objeto, por ejemplo, Student , utilice:

 Type type = new TypeToken>(){}.getType(); List students = gson.fromJson(json, type); 

La respuesta anterior funciona, pero no para la lista:

Para guardar la lista de objetos haz esto:

 List cars= new ArrayList(); cars.add(a); cars.add(b); cars.add(c); cars.add(d); gson = new Gson(); String jsonCars = gson.toJson(cars); Log.d("TAG","jsonCars = " + jsonCars); 

Lee el objeto json:

 Type type = new TypeToken>(){}.getType(); List carsList = gson.fromJson(jsonCars, type); 

Para mí funcionó así:

Poner valores en Preferencias Compartidas:

 String key = "Key"; ArrayList ModelArrayList=new ArrayList(); SharedPreferences shref; SharedPreferences.Editor editor; shref = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); Gson gson = new Gson(); String json = gson.toJson(ModelArrayList); editor = shref.edit(); editor.remove(key).commit(); editor.putString(key, json); editor.commit(); 

Para obtener valores de SharedPreferances:

 Gson gson = new Gson(); String response=shref.getString(key , ""); ArrayList lstArrayList = gson.fromJson(response, new TypeToken>(){}.getType()); 

Para guardar:

 public static void saveSharedPreferencesLogList(Context context, List callLog) { SharedPreferences mPrefs = context.getSharedPreferences(Constant.CALL_HISTORY_RC, context.MODE_PRIVATE); SharedPreferences.Editor prefsEditor = mPrefs.edit(); Gson gson = new Gson(); String json = gson.toJson(callLog); prefsEditor.putString("myJson", json); prefsEditor.commit(); } 

Para la carga:

 public static List loadSharedPreferencesLogList(Context context) { List callLog = new ArrayList(); SharedPreferences mPrefs = context.getSharedPreferences(Constant.CALL_HISTORY_RC, context.MODE_PRIVATE); Gson gson = new Gson(); String json = mPrefs.getString("myJson", ""); if (json.isEmpty()) { callLog = new ArrayList(); } else { Type type = new TypeToken>() { }.getType(); callLog = gson.fromJson(json, type); } return callLog; } 

PhoneCallLog es el nombre de mi objeto personalizado. (Contiene cadena, valores largos y booleanos)

Escribe un código en tus Preferencias Compartidas:

 public class MySharedPrefernce { private Context context; private String PREF_NAME = "UserPreference"; private int PRIVATE_MODE = 0; private SharedPreferences preferences; private SharedPreferences.Editor editor; private DataKey = "CART_RESTAURANTS"; //constructor public MySharedPrefernce(Context context) { this.context = context; this.preferences = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); editor = preferences.edit(); } //add data public void saveRestaurantToSharedPrefs(List cartRestaurantModel) { Gson gson = new Gson(); String jsonCart = gson.toJson(cartRestaurantModel); editor.putString(DataKey, jsonCart); editor.commit(); } //get data public ArrayList getRestaurantToSharedPrefs() { List cartData; if (preferences.contains(DataKey)) { String jsonCart = preferences.getString(DataKey, null); Gson gson = new Gson(); CartRestaurantModel[] cartItems = gson.fromJson(jsonCart, CartRestaurantModel[].class); cartData = Arrays.asList(cartItems); cartData = new ArrayList(cartData); } else { try { return new ArrayList(); } catch (Exception e) { e.printStackTrace(); return null; } } return (ArrayList) cartData; } //clear data public void clearRestaurantSharedPrefsData() { editor.clear(); editor.commit(); } } 

Escribe un código en tu Actividad / Fragmento para almacenar y recuperar:

 public List cartRestaurantModel = new ArrayList(); // to maintain restaurant for cart menus 

Almacenar :

 new MySharedPrefernce(this).saveRestaurantToSharedPrefs(cartRestaurantModel); 

Para recuperar:

 cartRestaurantModel = new MySharedPrefernce(this).getRestaurantToSharedPrefs();