[英]Retrofit 2.0 how to 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'不是有效的响应体类型。 你的意思是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
}
});
或者,杰克沃顿建议
使用Void不仅具有更好的语义,而且在空的情况下(稍微)更高效,在非空的情况下(当你不关心身体时)效率更高。
所以你有了:
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:省略了正确的回调定义。 固定:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.