Method getResources没有用请求类型注释(例如,GET,POST)是什么意思?

rod*_*dly 4 java retrofit

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

与调用代码:

mApi.getResources(data, this);
Run Code Online (Sandbox Code Playgroud)

该类实现了Callback,因此定义了成功/失败.

堆栈跟踪:

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)
Run Code Online (Sandbox Code Playgroud)

Jak*_*ton 5

这意味着@POST在运行时无法找到注释.如果没有HTTP方法类型(以及它包含的相对URL),则Retrofit无法发出请求.

您使用Proguard或其他工具来修剪"未使用"的代码吗?如果是这样,请指示它保留Retrofit的注释.


Cha*_*ham 5

除了Jake的回答,这是我必须添加到我的proguard文件以使其正常工作:

-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.** { *; }
Run Code Online (Sandbox Code Playgroud)