在Android上,我最初实现了一个像这样的Retrofit界面:
@DELETE(USER_API_BASE_URL + "/{id}")
public void deleteUser(@Path("id") String id, Callback<User> callback);
成功删除后,服务器返回204 NO CONTENT。这导致回调触发失败,使用retrofit.RetrofitError: End of input at character 0 of
,因为它期望User
对象返回响应。
然后我使用Void
而不是User
重写了这个:
@DELETE(USER_API_BASE_URL + "/{id}")
public void deleteUser(@Path("id") String id, Callback<Void> callback); <-- VOID
但是我从回调中得到了同样的错误。 解决这个问题的正确方法是什么?谢谢。
答案 0 :(得分:20)
Retrofit 2.x
no longer has a ResponseCallback
as mentioned in the other answer. You want to use a Response<Void>
type.
The RxJava declaration:
@PUT Observable<Response<Void>> foo();
The standard declaration:
@PUT Call<Response<Void>> bar();
答案 1 :(得分:8)
Jake Wharton在评论中指出了解决方案。使用ResponseCallback。
编辑:此响应不再适用于Retrofit&lt; 2。
答案 2 :(得分:1)
这是实现处理 HTTP 204 和无内容的 kotlin 方式。
@DELETE(USER_API_BASE_URL + "/{id}")
suspend fun deleteuser(@HeaderMap headers: Map<String, String>,
@Path("id") id: String)
: Response<Void>