方法getResources未注释请求类型(例如,GET、POST)是什么意思?

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

使用调用代码:

mApi.getResources(data, this);

该类实现了回调,因此成功/失败已被定义。
堆栈跟踪:
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)
3个回答

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

那有助于我的应用程序能够发起 HTTP 请求并接收数据。谢谢。 - John Pang

5
这意味着在运行时找不到@POST注解。没有HTTP方法类型(以及它所包含的相对URL),Retrofit无法发出请求。
您是否使用Proguard或其他工具修剪“未使用”的代码?如果是,请指示保留Retrofit的注解。

这是Proguard。感谢Jake。 - rodly
我遇到了相同的问题,而且我甚至没有使用proguard。请问你能帮忙吗?POST请求正常工作,但GET请求会给我这个错误。 - ShahrozKhan91
你能描述一下需要在proguard配置中添加什么才能使它工作吗?我有一个名为“API”的接口,使用了Retrofit的@POST、@GET等注解,但是Proguard一直在剥离它们。 - regretoverflow
1
我从未使用过ProGuard。 - Jake Wharton

0
同意@chad的答案,如果仍然崩溃,请添加以下行。
-keepattributes Signature
-keep class sun.misc.Unsafe { *; }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接