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)
这意味着@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.** { *; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3826 次 |
| 最近记录: |