private interface ResourcesApi {
@POST("/synchronize")
void getResources(@Body Map<String, Map<String, Object>> map,
Callback<DataModel> 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 (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)
答案 0 :(得分:5)
这意味着在运行时无法找到@POST
注释。如果没有HTTP方法类型(以及它包含的相对URL),Retrofit就无法发出请求。
您使用Proguard或其他工具来修剪“未使用”的代码吗?如果是这样,请指示它保留Retrofit的注释。
答案 1 :(得分: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.** { *; }
答案 2 :(得分:0)
同意@ chad的回答,如果仍然崩溃,请添加以下行。
-keepattributes Signature
-keep class sun.misc.Unsafe { *; }