19

在 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

但是我从回调中得到了同样的错误。解决此问题的正确方法是什么?谢谢你。

4

3 回答 3

29

Retrofit 2.x不再有ResponseCallback另一个答案中提到的 a 。你想使用一种Response<Void>类型。

RxJava 声明:

@PUT Observable<Response<Void>> foo();

标准声明:

@PUT Call<Response<Void>> bar();
于 2015-12-04T21:22:50.590 回答
9

Jake Wharton 在评论中指出了解决方案。使用响应回调。

编辑:此响应对于 Retrofit < 2 不再有效。

于 2015-01-14T16:43:15.650 回答
1

这是实现处理HTTP 204且无内容的kotlin方式。

@DELETE(USER_API_BASE_URL + "/{id}")
suspend fun deleteuser(@HeaderMap headers: Map<String, String>, 
                       @Path("id") id: String)
: Response<Void>
于 2021-02-19T18:20:43.330 回答