4
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)
4

3 に答える 3

5

ジェイクの答えに加えて、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.** { *; }
于 2014-12-22T21:15:29.487 に答える
5

これは、@POST実行時に注釈が見つからないことを意味します。HTTP メソッド タイプ (およびそれに含まれる相対 URL) がなければ、Retrofit は要求を行うことができません。

Proguard または別のツールを使用して「未使用」コードを削除していますか? その場合は、Retrofit の注釈を保持するように指示してください。

于 2014-03-10T00:54:48.343 に答える
0

@chadの回答に同意し、それでもクラッシュする場合は以下の行を追加してください。

-keepattributes Signature
-keep class sun.misc.Unsafe { *; }
于 2016-06-24T12:10:33.800 に答える