Ich habe eine Modellklasse, die ich will durch Gson serialisiert/deserialisiert, während er an einem Android-Service zurückschicken:java.lang.IllegalArgumentException während Deserialisieren JSON durch Gson
public final class SearchTutorsQuery extends com.google.api.client.json.GenericJson {
@com.google.api.client.util.Key
private com.learncity.searchApi.model.LatLng location;
@com.google.api.client.util.Key
private java.util.List<java.lang.String> subjects;
@com.google.api.client.util.Key
private com.learncity.searchApi.model.TutorProfileResponseView tutorProfileResponseView;
@com.google.api.client.util.Key
private java.util.List<java.lang.String> tutorTypes;
public SearchTutorsQuery() { /* compiled code */ }
}
ich eine Ausnahme bin immer während der Deserialisierung JSON-String:
java.lang.IllegalArgumentException: field com.learncity.searchApi.model.SearchTutorsQuery.tutorProfileResponseView has type com.learncity.searchApi.model.TutorProfileResponseView, got com.google.gson.internal.LinkedTreeMap
at java.lang.reflect.Field.set(Native Method)
at com.google.api.client.util.FieldInfo.setFieldValue(FieldInfo.java:245)
at com.google.api.client.util.FieldInfo.setValue(FieldInfo.java:206)
at com.google.api.client.util.GenericData.put(GenericData.java:103)
at com.google.api.client.util.GenericData.put(GenericData.java:47)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:188)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
at com.google.gson.Gson.fromJson(Gson.java:887)
at com.google.gson.Gson.fromJson(Gson.java:852)
at com.google.gson.Gson.fromJson(Gson.java:801)
at com.google.gson.Gson.fromJson(Gson.java:773)
at com.learncity.learner.search.SearchService$SearchHandler.handleMessage(SearchService.java:66)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Hier ist die TutorProfileResponseView die Ausnahme geben:
public final class TutorProfileResponseView extends com.google.api.client.json.GenericJson {
@com.google.api.client.util.Key
private java.lang.Integer disciplines;
@com.google.api.client.util.Key
private com.learncity.searchApi.model.EducationalQualificationResponseView educationalQualification;
@com.google.api.client.util.Key
private com.learncity.searchApi.model.EducationalQualificationResponseView educationalQualifications;
@com.google.api.client.util.Key
private java.lang.Integer global;
@com.google.api.client.util.Key
private java.lang.Integer mCurrentStatus;
@com.google.api.client.util.Key
private java.lang.Integer mDisplayPicturePath;
@com.google.api.client.util.Key
private java.lang.Integer mEmailID;
@com.google.api.client.util.Key
private com.learncity.searchApi.model.LatLngResponseView mLastKnownGeoCoordinates;
@com.google.api.client.util.Key
private java.lang.Integer mName;
@com.google.api.client.util.Key
private java.lang.Integer mPassword;
@com.google.api.client.util.Key
private java.lang.Integer mPhoneNo;
@com.google.api.client.util.Key
private java.lang.Integer nil;
@com.google.api.client.util.Key
private com.learncity.searchApi.model.OccupationResponseView occupation;
@com.google.api.client.util.Key
private java.lang.Integer rating;
@com.google.api.client.util.Key
private com.learncity.searchApi.model.CreditsResponseView teachingCredits;
@com.google.api.client.util.Key
private java.lang.Integer tutorTypes;
public TutorProfileResponseView() { /* compiled code */ }
}
Falls Sie die Klassenhierarchie für com.google.api.client.json.GenericJson
hier wissen wollen, ist:
java.lang.Object
java.util.AbstractMap<String,Object>
com.google.api.client.util.GenericData
com.google.api.client.json.GenericJson
ich die folgenden zwei Regeln in proguard Datei setzen versucht haben:
-keep class com.google.gson.stream.** { *; }
-keep class com.learncity.searchApi.model.** { *; }
Hat jemand eine Idee, was Ich vermisse?
Entfernen Sie die Erweiterungen und versuchen Sie es erneut. – Mehdi
@Mehdi: Das ist das Problem: Dies ist Code von Google Client-API-Generator generiert. Ich kann mich nicht in diese Klassen einmischen. –
Es klingt sehr ähnlich zu http://stackoverflow.com/questions/42553204/how-to-convert-json-to-vector-classcastexception-gson-android-4-4-2#comment72242065_42553204. Haben Sie in Ihrer ProGuard-Konfigurationsdatei "-kennzeichnet Signatur"? –