Я пытаюсь сделать асинхронные POST и DELETE, которые кодируются с помощью Retrofit в Android 4.4
Вот мой клиент -
@FormUrlEncoded
@POST(INetwork.API_BASE_PREFIX + "/memberships.json")
void join(@Field("id") String id, Callback<?> cb);
@FormUrlEncoded
@DELETE(INetwork.API_BASE_PREFIX + "/memberships.json")
void leave(@Field("id") String id, Callback<?> cb);
И это исключение -
java.lang.IllegalArgumentException: IRepositoryClient.leave: FormUrlEncoded can only be specified on HTTP methods with request body (e.g., @POST).
at retrofit.RestMethodInfo.methodError(RestMethodInfo.java:118)
at retrofit.RestMethodInfo.parseMethodAnnotations(RestMethodInfo.java:191)
at retrofit.RestMethodInfo.init(RestMethodInfo.java:128)
at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:329)
at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:264)
at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:315)
at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at retrofit.Platform$Android$2$1.run(Platform.java:142)
at java.lang.Thread.run(Thread.java:841)
Я просмотрел источник, и это в основном, если у метода нет тела, и запрос формализован, это исключение выбрано. Также я заметил, что весь пример FormUrlEncoded работает нормально, когда он не является асинхронным, то есть у меня есть какой-то тип возврата и никакого обратного вызова - извините, я немного потерял
Должен ли я отправить пустое тело? Должен ли я отправить один и не будет ли параметров @Field достаточным?
Использование Retrofit 1.5.0