Ich habe eine ArrayList eines Objekts. Das Objekt enthält die Typen 'Bitmap' und 'String' und dann nur Getter und Setter für beide. Ist Bitmap zunächst serialisierbar?
Wie würde ich dies serialisieren, um es in SharedPreferences zu speichern? Ich habe viele Leute gesehen, die eine ähnliche Frage gestellt haben, aber keine scheint eine gute Antwort zu geben. Ich würde einige Codebeispiele bevorzugen, wenn dies überhaupt möglich ist.
Wenn die Bitmap nicht serialisierbar ist, wie gehe ich dann vor, um diese ArrayList zu speichern?
Danke vielmals.
android
arraylist
sharedpreferences
serializable
Paul Blundell
quelle
quelle
SharedPreferences
, da Sie dort nicht einfach serialisierte Objekte speichern können. Vielleicht denkst du an eineBundle
?Antworten:
Ja, Sie können Ihr zusammengesetztes Objekt in freigegebenen Einstellungen speichern. Sagen wir..
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();
..und jetzt können Sie Ihr Objekt abrufen als:
SharedPreferences appSharedPrefs = PreferenceManager .getDefaultSharedPreferences(this.getApplicationContext()); Gson gson = new Gson(); String json = appSharedPrefs.getString("MyObject", ""); Student mStudentObject = gson.fromJson(json, Student.class);
Weitere Informationen finden Sie hier.
Wenn Sie ein
ArrayList
Objekt eines beliebigen Typs zurückerhalten möchten, zStudent
.Type type = new TypeToken<List<Student>>(){}.getType(); List<Student> students = gson.fromJson(json, type);
quelle
Die obige Antwort funktioniert, aber nicht für die Liste:
Um die Liste der Objekte zu speichern, gehen Sie wie folgt vor:
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);
Lesen Sie das json-Objekt:
Type type = new TypeToken<List<Cars>>(){}.getType(); List<Cars> carsList = gson.fromJson(jsonCars, type);
quelle
Type
hier?Type type = new TypeToken<List<?>>(){}.getType();
? Als Ergebnis erhalte ich eine LinkedTreeMap und dies ist die Definition meiner Methode:public static List<?> getList(String json) {
Bei mir hat es so funktioniert:
Werte in SharedPreferances einfügen:
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();
So erhalten Sie Werte von SharedPreferances:
Gson gson = new Gson(); String response=shref.getString(key , ""); ArrayList<ModelClass> lstArrayList = gson.fromJson(response, new TypeToken<List<ModelClass>>(){}.getType());
quelle
Zum Speichern:
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(); }
Zum Laden:
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 ist der Name meines benutzerdefinierten Objekts. (Enthält String-, Long- und Boolesche Werte)
quelle
apply
statt verwendencommit
?Das obige Beispiel von Mete wirkte wie ein Zauber.
Hier ist ein Kotlin- Beispiel
private var prefs: SharedPreferences = context?.getSharedPreferences("sharedPrefs", MODE_PRIVATE) ?: error("err") private val gson = Gson()
sparen
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() }
lesen
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 }
quelle
Die Kotlin-Implementierung mit der
Gson
Erweiterung der Antwort von @ SpyZips,Serialisierung zu JSON
val jsonCars: String = Gson().toJson(cars);
Deserialisieren, um zur Liste der Objekte zurückzukehren
val type = object: TypeToken<List<Car>>(){}.type val carsList: List<Car> = Gson().fromJson(jsonCars, type)
quelle