我正在使用Retrofit 2.0
。要从RESTFull服务获取一些数据,我使用以下过程:
public Call downloadUser() {
// Create RetrofitService
Call<User> call = service.getUser();
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Response<User> response, Retrofit retrofit) {
// Do some operations with User obj if response.isSuccess()
}
@Override
public void onFailure(Throwable t) {
// Failure
}
});
return call;
}
在某些情况下,我需要取消我的请求。我使用了call.cancel()
,但即使我将此程序调用为Callback.onResponse(...)
或Callback.onFailure(...)
,因此使用Call.cancel()
并不取消我的请求,并且一直持续到失败或回应。
答案 0 :(得分:1)
要知道呼叫是否被取消或是否真的成功,您需要做两件事。
首先看起来您正在使用的Retrofit2版本需要更新
第二次您可以根据以下代码检查是否取消了通话。请注意,这将处理OKHttp3中Call<>
或Dispatcher.class
的取消
@Override
public void onResponse(Response<User> response, Response response) {
if(response != null && response.isSuccessful()) {
//Do Stuff with the response
}
}
@Override
public void onFailure(Call<User> user, Throwable t) {
if(user.isCanceled() || "Canceled".equals(t.getMessage())) {
//Call was canceled
} else {
//Call failed
}
}