我创建了一个通用的改造服务:
public interface GenericService<T>{
@GET("/repos/{id}")
//sync
T all(@Path("id")String id);
@GET("/repos/{id}")
//async
void all(@path(id) String id, Callback<T> callback);
}
并有一些模特:
public class Publication{
String id;
User creator;
//getter & setter
}
public class User{
String id;
String nickname;
//getter & setter
}
但发现如下错误:
11-06 10:14:10.444 3355-3355/com.baoshi.mua E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.baoshi.mua.model.Publication
at com.baoshi.mua.activities.MainActivity$1.onRequestSuccess(MainActivity.java:96)
at com.octo.android.robospice.request.notifier.DefaultRequestListenerNotifier$ResultRunnable.run(DefaultRequestListenerNotifier.java:174)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5400)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:853)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
at dalvik.system.NativeStart.main(Native Method)
是否允许创建通用服务?
如果允许,如何修复错误。
答案 0 :(得分:0)
这个问题因Java运行时擦除而上升,简单来说,Java在运行时并不知道类型T,因此Retrofit无法启动Gson json解析器,因此您只需从服务中获取原始JSON字符串。此外,您可以在onSuccess方法中重新启动GSON解析器,然后您的问题将得到解决,但此方法无用,您只需删除Retrofit的所有优势。