如何创建通用改造服务

时间:2014-11-06 02:41:56

标签: java android web-services retrofit

我创建了一个通用的改造服务:

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)

是否允许创建通用服务?

如果允许,如何修复错误。

1 个答案:

答案 0 :(得分:0)

这个问题因Java运行时擦除而上升,简单来说,Java在运行时并不知道类型T,因此Retrofit无法启动Gson json解析器,因此您只需从服务中获取原始JSON字符串。此外,您可以在onSuccess方法中重新启动GSON解析器,然后您的问题将得到解决,但此方法无用,您只需删除Retrofit的所有优势。