java - Retrofit 2.0怎么删除?

标签 java android retrofit retrofit2 http-delete

我正在使用 retrofit 2.0,我正在我的 Android 应用程序中实现删除功能,但是,我无法成功,有人可以给我建议吗?

我都试过了:

@DELETE("books/{id}") void deleteBook(@Path("id") int itemId);

@DELETE("books/{id}") void deleteBook(@Path("id") int bookId, Callback<Response> callback);

我收到错误 java.lang.IllegalArgumentException:服务方法无法返回 void。对于方法 LibraryService.deleteBook。

我也试了一下:

Response deleteBook(@Path("id") int bookId);

Call<Response> deleteBook(@Path("id") int bookId);

无论我使用 okhttp3.Response 还是 retrofit2.Response,我都会得到错误:'*.Response' is not a valid response body type。您是说 ResponseBody 吗?

谁能给我一个成功删除的例子?我在网上搜索但找不到足够的信息。非常感谢。

最佳答案

按照你最后记下的方式做:

Call<ResponseBody> deleteBook(@Path("id") int bookId);

确保通过 AsyncTask 或其他一些线程机制在 UI 线程之外进行调用。不确定您之前是否使用过 RxJava + Retrofit 2,但它很好。

ResponseBody 对象将返回调用的结果。这是我用于一些不返回实体对象的 REST API 请求的方法,我只关心查看响应代码。

Call<ResponseBody> deleteRequest = mService.deleteBook(123);
deleteRequest.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        // use response.code, response.headers, etc.
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
        // handle failure
    }
});

或者, jack 沃顿建议

Use Void which not only has better semantics but is (slightly) more efficient in the empty case and vastly more efficient in a non-empty case (when you just don't care about body).

所以你有:

Call<Void> deleteBook(@Path("id") int bookId);

用法:

deleteRequest.enqueue(new Callback<Void>() {
    @Override
    public void onResponse(Call<Void> call, Response<Void> response) {
        // use response.code, response.headers, etc.
    }

    @Override
    public void onFailure(Call<Void> call, Throwable t) {
        // handle failure
    }
});

如果您只关心响应代码而不关心响应正文,那就更好了

编辑 2:遗漏了正确的回调定义。固定 :)

关于java - Retrofit 2.0怎么删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36251080/

相关文章:

android - 改造 400 错误请求

java - 如何使用 Apache Ignite 作为 JSR 107 缓存?

java - 将参数传递给 bytebuddy 拦截器

java - 执行jar文件时出错

java - 如何在android上将SQLiteDatabase查询结果显示为html?

java - 按降序对整数数组进行排序并将其与相应的字符串数组相关联

java - 在布局中显示自定义 View

Android:项目之间的GridLayout间距

java - 安卓,改造 2 : How to make calls every 5 second?

android - 改进如何在参数中添加逗号