Ich habe gerade TinyDB entdeckt, was sehr nützlich erscheint, um Objektspeicher in den SharedPreferences zu behandeln.TinyDB - SharedPreferences - bekommen: vergessen, einen Typ Adapter zu registrieren?
Ich bin fast da, aber ich bekomme einen Fehler: Haben Sie vergessen, einen Typ Adapter zu registrieren? Beachten Sie, dass die GSON-Bibliothek von Google zusammen mit TinyDB verwendet wird.
Also, lassen Sie mich meinen Code mit Ihnen teilen. Jede Hilfe würde sehr geschätzt werden.
Hier ist die stacktrace ist
java.lang.UnsupportedOperationException: Attempted to serialize
java.lang.Class: com.ilepez.weatherapp.data.model.CityArrayList. Forgot to register a type adapter?
at com.google.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:76)
at com.google.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:69)
at com.google.gson.Gson.toJson(Gson.java:669)
at com.google.gson.Gson.toJson(Gson.java:648)
at com.google.gson.Gson.toJson(Gson.java:603)
at com.google.gson.Gson.toJson(Gson.java:583)
at com.ilepez.weatherapp.utils.TinyDB.putObject(TinyDB.java:462)
at com.ilepez.weatherapp.activity.SearchActivity.onItemClick(SearchActivity.java:67)
at android.widget.AutoCompleteTextView.performCompletion(AutoCompleteTextView.java:928)
at android.widget.AutoCompleteTextView.access$500(AutoCompleteTextView.java:93)
at android.widget.AutoCompleteTextView$DropDownItemClickListener.onItemClick(AutoCompleteTextView.java:1230)
at android.widget.AdapterView.performItemClick(AdapterView.java:345)
at android.widget.AbsListView.performItemClick(AbsListView.java:1547)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3821)
at android.widget.AbsListView$3.run(AbsListView.java:5841)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
07-17 10:55:26.283 15392-15392/com.ilepez.weatherapp E/libEGL: call to OpenGL ES API with no current context (logged once per thread)
Also, lassen Sie mich mit Ihnen meinen Code teilen. Jede Hilfe würde sehr geschätzt werden.
So, hier ist der Moment, als ich TinyDB mein Objekt hinzufügen
City city = new City(description, itemLatitude, itemLongitude);
ArrayList<Object> savedCity = new ArrayList<>();
savedCity.add(city);
for (City oCity : CityArrayList.getInstance().getCityList()) {
savedCity.add(oCity);
}
TinyDB tinydb = new TinyDB(this);
tinydb.putObject("city", CityArrayList.class);
Hier mein Modell
public class CityArrayList {
public ArrayList<City> cityList;
private CityArrayList() {
cityList = new ArrayList<City>();
}
public ArrayList<City> getCityList() {
return cityList;
}
private static CityArrayList instance;
public static CityArrayList getInstance() {
if (instance == null) instance = new CityArrayList();
return instance;
}
}
ist und für die Stadt selbst
public class City {
private String cityName;
private double cityLat;
private double cityLong;
public City(String cityName, double cityLat, double cityLong) {
this.cityName = cityName;
this.cityLat = cityLat;
this.cityLong = cityLong;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public double getCityLat() {
return cityLat;
}
public void setCityLat(double cityLat) {
this.cityLat = cityLat;
}
public double getCityLong() {
return cityLong;
}
public void setCityLong(double cityLong) {
this.cityLong = cityLong;
}
@Override
public String toString() {
return "City{" +
"cityName='" + cityName + '\'' +
", cityLat=" + cityLat +
", cityLong=" + cityLong +
'}';
}
}
wahrscheinlich Realm verwenden sollten. sharedPrefences können vom Benutzer mit den App-Einstellungen gelöscht werden. – Shubhank
Vielen Dank @Shubhank, ich werde mit Realm untersuchen. Traurig, keine Lösung gefunden zu haben ... – Isabelle
'... Objektspeicher in SharedPreferences zu behandeln' ... das ist in der Tat ein [** Anti-Pattern **] (https://en.wikipedia.org/ Wiki/Anti-Muster). Lassen Sie mich dringend davon abraten, Objekte mithilfe von SharedPreferences zu speichern und zu laden. –