改造取消请求

时间:2015-12-22 13:18:13

标签: android retrofit okhttp

我正在使用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()并不取消我的请求,并且一直持续到失败或回应。

1 个答案:

答案 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 
    }
}