2016-07-17 1 views
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 + 
       '}'; 
    } 
} 
에 대한
+0

아마 영역을 사용한다 : 여기

는 코드가 제대로 작동 할 수 있어야하는 것이다. 사용자가 앱 설정을 사용하여 sharedPrefences를 지울 수 있습니다. – Shubhank

+0

감사합니다. @Shubhank, 나는 영역을 사용하여 조사 할 것입니다. 슬프게도 해결책을 찾지 못했습니다 ... – Isabelle

+0

'... SharedPreferences에 객체 저장소를 처리하는 중 ... ... 실제로 ** [** 안티 패턴 **] (https://en.wikipedia.org/ 위키/안티 패턴). SharedPreferences를 사용하여 개체를 저장하고로드하지 못하도록 강하게하겠습니다. –

답변

3

잘못된 것을 전달하고 있습니다. putObject 메서드는 이 아닌 클래스 유형의 String 키와 이미 intentiated 객체를 전달해야합니다.

City mCity = new City(description, itemLatitude, itemLongitude); 
tinydb.putObject("city", mCity);