what does Method getResources not annotated with request type (e.g., GET, POST) mean?

依然范特西╮ 提交于 2019-12-31 01:27:20

问题


private interface ResourcesApi {
        @POST("/synchronize")
        void getResources(@Body Map<String, Map<String, Object>> map,
                          Callback<DataModel> callback);
    }

with calling code:

mApi.getResources(data, this);

The class implements Callback so success/failure are defined.

STACKTRACE:

03-09 18:05:15.182  28570-28746/? E/AndroidRuntime﹕ FATAL EXCEPTION: pool-2-thread-1
    java.lang.IllegalStateException: Method getResources not annotated with request type (e.g., GET, POST).
            at retrofit.RestMethodInfo.parseMethodAnnotations(RestMethodInfo.java:179)
            at retrofit.RestMethodInfo.init(RestMethodInfo.java:115)
            at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:327)
            at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:262)
            at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:313)
            at retrofit.CallbackRunnable.run(CallbackRunnable.java:38)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
            at java.lang.Thread.run(Thread.java:856)

回答1:


It means the @POST annotation can't be found at runtime. Without the HTTP method type (and relative URL it contains), Retrofit cannot make the request.

Are you using Proguard or another tool to trim "unused" code? If so, instruct it to keep Retrofit's annotations.




回答2:


In addition to Jake's answer, this is what I had to add to my proguard file to get it to work correctly:

-keep class com.google.gson.** { *; }
-keep class com.google.inject.** { *; }
-keep class org.apache.http.** { *; }
-keep class org.apache.james.mime4j.** { *; }
-keep class javax.inject.** { *; }
-keep class retrofit.** { *; }



回答3:


Agree with @chad's answer, add below lines if still getting crash.

-keepattributes Signature
-keep class sun.misc.Unsafe { *; }


来源:https://stackoverflow.com/questions/22288868/what-does-method-getresources-not-annotated-with-request-type-e-g-get-post

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!