J'ai un ArrayList d'un objet. L'objet contient les types 'Bitmap' et 'String', puis seulement des accesseurs et des setters pour les deux. Tout d'abord, Bitmap est-il sérialisable?
Comment ferais-je pour sérialiser ceci afin de le stocker dans SharedPreferences? J'ai vu beaucoup de gens poser une question similaire mais aucune ne semble donner une bonne réponse. Je préférerais quelques exemples de code si possible.
Si bitmap n'est pas sérialisable, comment puis-je stocker cet ArrayList?
merci beaucoup.
Oui, vous pouvez enregistrer votre objet 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();
String json = gson.toJson(mStudentObject);
prefsEditor.putString("MyObject", json);
prefsEditor.commit();
..et maintenant vous pouvez récupérer votre objet en tant que:
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
Gson gson = new Gson();
String json = appSharedPrefs.getString("MyObject", "");
Student mStudentObject = gson.fromJson(json, Student.class);
Pour plus d'informations, cliquez ici.
Si vous souhaitez récupérer une ArrayList
d'un objet de type, par exemple. Student
, puis utilisez:
Type type = new TypeToken<List<Student>>(){}.getType();
List<Student> students = gson.fromJson(json, type);
La réponse ci-dessus fonctionne, mais pas pour la liste:
Pour enregistrer une liste d'objets, procédez comme suit:
List<Cars> cars= new ArrayList<Cars>();
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);
Lire l'objet json:
Type type = new TypeToken<List<Cars>>(){}.getType();
List<Cars> carsList = gson.fromJson(jsonCars, type);
Pour moi cela a fonctionné comme ceci:
Mettez des valeurs dans SharedPreferances:
String key = "Key";
ArrayList<ModelClass> 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();
Pour obtenir des valeurs de SharedPreferances:
Gson gson = new Gson();
String response=shref.getString(key , "");
ArrayList<ModelClass> lstArrayList = gson.fromJson(response,
new TypeToken<List<ModelClass>>(){}.getType());
Pour économiser:
public static void saveSharedPreferencesLogList(Context context, List<PhoneCallLog> 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();
}
Pour charge:
public static List<PhoneCallLog> loadSharedPreferencesLogList(Context context) {
List<PhoneCallLog> callLog = new ArrayList<PhoneCallLog>();
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<PhoneCallLog>();
} else {
Type type = new TypeToken<List<PhoneCallLog>>() {
}.getType();
callLog = gson.fromJson(json, type);
}
return callLog;
}
PhoneCallLog est le nom de mon objet personnalisé. (Contient les valeurs String, long et boolean)
## Pour un appel unique et la récupération de votre liste, utilisez ## `List models = new ArrayList <> ();
Gson gson = new Gson();
String value= gson.toJson(models);
PreferenceManager.getDefaultSharedPreferences(context).edit().putString(value, "StringValueToRetrieve").apply();
String value=PreferenceManager.getDefaultSharedPreferences(context).getString("StringValueToRetrieve", "noValue");
if(!value.contains("noValue")){
Gson gson = new Gson();
List<Model> models= gson.fromJson(value,
new TypeToken<List<Model>>(){}.getType());
}
`
Supposons que vous ayez une classe appelée Medication. Vous pouvez utiliser les fonctions suivantes:
public static void saveMedicineToList(Medication medication){
ArrayList<Medication> medicationArrayList = getListOfMedication();
if(medicationArrayList == null) medicationArrayList = new ArrayList<>();
medicationArrayList.add(medication);
saveListOfMedicine(medicationArrayList);
}
public static void saveListOfMedicine(ArrayList<Medication> medicationArrayList){
SharedPreferences shref;
SharedPreferences.Editor editor;
shref = PreferenceManager.getDefaultSharedPreferences(SakshamApp.getInstance());
Gson gson = new Gson();
String json = gson.toJson(medicationArrayList);
editor = shref.edit();
editor.remove(KEY_MIDICINES_LIST).commit();
editor.putString(KEY_MIDICINES_LIST, json);
editor.commit();
}
public static ArrayList<Medication> getListOfMedication(){
SharedPreferences shref = PreferenceManager.getDefaultSharedPreferences(SakshamApp.getInstance());
Gson gson = new Gson();
String response=shref.getString(KEY_MIDICINES_LIST , "");
ArrayList<Medication> medicationArrayList = gson.fromJson(response,
new TypeToken<List<Medication>>(){}.getType());
return medicationArrayList;
}
L'exemple de Mete ci-dessus a fonctionné à merveille.
Voici un exemple Kotlin
private var prefs: SharedPreferences = context?.getSharedPreferences("sharedPrefs", MODE_PRIVATE)
?: error("err")
private val gson = Gson()
enregistrer
fun saveObjectToArrayList(yourObject: YourObject) {
val bookmarks = fetchArrayList()
bookmarks.add(0, yourObject)
val prefsEditor = prefs.edit()
val json = gson.toJson(bookmarks)
prefsEditor.putString("your_key", json)
prefsEditor.apply()
}
lis
fun fetchArrayList(): ArrayList<YourObject> {
val yourArrayList: ArrayList<YourObject>
val json = prefs.getString("your_key", "")
yourArrayList = when {
json.isNullOrEmpty() -> ArrayList()
else -> gson.fromJson(json, object : TypeToken<List<Feed>>() {}.type)
}
return yourArrayList
}
Écrivez un code dans vos préférences partagées:
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> cartRestaurantModel) {
Gson gson = new Gson();
String jsonCart = gson.toJson(cartRestaurantModel);
editor.putString(DataKey, jsonCart);
editor.commit();
}
//get data
public ArrayList<CartRestaurantModel> getRestaurantToSharedPrefs() {
List<CartRestaurantModel> 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<CartRestaurantModel>(cartData);
} else {
try {
return new ArrayList<CartRestaurantModel>();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
return (ArrayList<CartRestaurantModel>) 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> cartRestaurantModel = new ArrayList<CartRestaurantModel>(); // to maintain restaurant for cart menus
Ranger :
new MySharedPrefernce(this).saveRestaurantToSharedPrefs(cartRestaurantModel);
À récupérer :
cartRestaurantModel = new MySharedPrefernce(this).getRestaurantToSharedPrefs();