xia*_*orm 12 java android http-delete retrofit retrofit2
我正在使用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);
Run Code Online (Sandbox Code Playgroud)
我得到错误java.lang.IllegalArgumentException:服务方法不能返回void.方法LibraryService.deleteBook.
我也尝试过这个:
Response deleteBook(@Path("id") int bookId);
Run Code Online (Sandbox Code Playgroud)
Call<Response> deleteBook(@Path("id") int bookId);
无论我使用okhttp3.Response还是retrofit2.Response,我都会收到错误:'*.Response'不是有效的响应体类型.你的意思是ResponseBody?
有人可以给我一个成功的删除示例吗?我在网上搜索但找不到足够的信息.非常感谢.
Luc*_*ord 18
就像你上次提到的那样这样做:
Call<ResponseBody> deleteBook(@Path("id") int bookId);
Run Code Online (Sandbox Code Playgroud)
确保通过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
}
});
Run Code Online (Sandbox Code Playgroud)
或者,杰克沃顿建议
使用Void不仅具有更好的语义,而且在空白情况下(略微)更高效,在非空情况下(当你不关心身体时)效率更高.
所以你有了:
Call<Void> deleteBook(@Path("id") int bookId);
Run Code Online (Sandbox Code Playgroud)
用法:
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
}
});
Run Code Online (Sandbox Code Playgroud)
如果你关心的只是响应代码并且没有响应的主体,那就更好了
编辑2:省略了正确的回调定义.固定:)
| 归档时间: |
|
| 查看次数: |
11118 次 |
| 最近记录: |