ArrayList Android des objects personnalisés – Enregistrer dans des préférences partagées – Serializable?

J’ai un ArrayList d’un object. L’object contient les types ‘Bitmap’ et ‘Ssortingng’, puis juste des getters et des setters pour les deux. Tout d’abord, Bitmap est-il sérialisable?

Comment pourrais-je procéder pour la sérialiser afin de la stocker dans SharedPreferences? J’ai vu beaucoup de gens poser une question similaire, mais aucun ne semble donner une bonne réponse. Je préférerais des exemples de code si possible.

Si le bitmap n’est pas sérialisable, comment puis-je stocker cette ArrayList?

Merci beaucoup.

Oui, vous pouvez enregistrer votre object composite dans les préférences partagées. Disons..

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

..et maintenant vous pouvez récupérer votre object comme:

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

Pour plus d’informations, cliquez ici.

Si vous voulez récupérer une ArrayList de n’importe quel type d’object, par exemple Student , utilisez alors:

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

La réponse ci-dessus fonctionne, mais pas pour la liste:

Pour enregistrer la liste des objects, procédez comme suit:

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

Lisez l’object json:

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

Pour moi, cela a fonctionné comme ceci:

Mettez des valeurs dans SharedPreferances:

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

Pour obtenir des valeurs de SharedPreferances:

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

Pour enregistrer:

 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(); Ssortingng json = gson.toJson(callLog); prefsEditor.putSsortingng("myJson", json); prefsEditor.commit(); } 

Pour le chargement:

 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(); Ssortingng json = mPrefs.getSsortingng("myJson", ""); if (json.isEmpty()) { callLog = new ArrayList(); } else { Type type = new TypeToken>() { }.getType(); callLog = gson.fromJson(json, type); } return callLog; } 

PhoneCallLog est le nom de mon object personnalisé. (Contient des valeurs Ssortingng, long et booléen)

Ecrivez un code dans vos préférences partagées:

 public class MySharedPrefernce { private Context context; private Ssortingng 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(); Ssortingng jsonCart = gson.toJson(cartRestaurantModel); editor.putSsortingng(DataKey, jsonCart); editor.commit(); } //get data public ArrayList getRestaurantToSharedPrefs() { List cartData; if (preferences.contains(DataKey)) { Ssortingng jsonCart = preferences.getSsortingng(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(); } } 

Écrivez un code dans votre activité / fragment pour stocker et récupérer:

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

Ranger :

 new MySharedPrefernce(this).saveRestaurantToSharedPrefs(cartRestaurantModel); 

À récupérer :

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