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

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

与调用代码:

 mApi.getResources(data, this); 

该类实现了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 (eg, 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) 

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

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

除了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.** { *; } 

同意@ chad的回答,如果仍然崩溃,请添加以下行。

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