0
방금 TinyDB이 발견되어 SharedPreferences에 객체 저장소를 처리하는 것이 매우 유용합니다.TinyDB - SharedPreferences - getting : 형식 어댑터를 등록하는 것을 잊었습니까?
거의 다 왔지만 오류가 발생했습니다. 유형 어댑터를 등록하는 것을 잊어 버리셨습니까? Google의 GSON 라이브러리는 TinyDB와 함께 사용됩니다.
내 코드를 알려 드리겠습니다. 어떤 도움을 주시면 감사하겠습니다.
여기 스택 트레이스 그래서
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)
이다, 내가 당신과 함께 내 코드를 공유 할 수 있습니다. 어떤 도움을 주시면 감사하겠습니다. 내가 TinyDB 내 객체를 추가 할 때 그래서 여기
여기
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);
내 모델
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;
}
}
입니다 그리고 순간이다 도시 자체
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 +
'}';
}
}
에 대한
아마 영역을 사용한다 : 여기
는 코드가 제대로 작동 할 수 있어야하는 것이다. 사용자가 앱 설정을 사용하여 sharedPrefences를 지울 수 있습니다. – Shubhank
감사합니다. @Shubhank, 나는 영역을 사용하여 조사 할 것입니다. 슬프게도 해결책을 찾지 못했습니다 ... – Isabelle
'... SharedPreferences에 객체 저장소를 처리하는 중 ... ... 실제로 ** [** 안티 패턴 **] (https://en.wikipedia.org/ 위키/안티 패턴). SharedPreferences를 사용하여 개체를 저장하고로드하지 못하도록 강하게하겠습니다. –