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

с вызывающим кодом:Что означает метод getResources, не аннотированный с типом запроса (например, GET, POST)?

mApi.getResources(data, this); 

Класс реализует обратный вызов, так успех/неудача определяются.

StackTrace:

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) 

ответ

5

Это означает, что @POST аннотации не могут быть найдены во время выполнения. Без типа метода HTTP (и относительного URL-адреса, который он содержит), Retrofit не может выполнить запрос.

Вы используете Proguard или другой инструмент для обрезки «неиспользуемого» кода? Если да, попросите его сохранить аннотации Retrofit.

+0

Это была Proguard. Спасибо Джейку. – rodly

+0

Я сталкиваюсь с теми же проблемами, и я даже не использую proguard. Пожалуйста, вы можете помочь? POST-запросы работают нормально, но в запросе GET дает мне эту ошибку – ShahrozKhan91

+0

Не могли бы вы описать, что нужно добавить в конфигурацию proguard, чтобы сделать эту работу? У меня есть интерфейс с именем «API», который использует \ @POST, \ @GET и т. Д. От модификации, но proguard сохраняет их удаление – regretoverflow

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

Это помогает моему приложению иметь возможность делать HTTP-вызов и получать данные. Благодарю. –

0

согласен с ответом @ Чаде, добавьте ниже строки, если по-прежнему получать аварии.

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