改造+ Okhttp取消操作不起作用

SHA*_*NDA 15 android httprequest cancellation retrofit okhttp

我在我的应用程序中使用这样的改造

 final OkHttpClient okHttpClient = new OkHttpClient();
 okHttpClient.interceptors().add(new YourInterceptor());

            final OkClient okClient = new OkClient(okHttpClient);
            Builder restAdapterBuilder = new RestAdapter.Builder();
            restAdapterBuilder.setClient(okClient).setLogLevel(LogLevel.FULL)
                    .setEndpoint("some url");
            final RestAdapter restAdapter = restAdapterBuilder.build();


public class YourInterceptor implements Interceptor {

    @Override
    public Response intercept(Chain chain) throws IOException {
        // TODO Auto-generated method stub
        Request request = chain.request();

        if (request != null) {
            Request.Builder signedRequestBuilder = request.newBuilder();
            signedRequestBuilder.tag("taggiventorequest");
            request = signedRequestBuilder.build();
            request.tag();
        }
        return chain.proceed(request);
    }
}
Run Code Online (Sandbox Code Playgroud)

发送请求后我打电话

okHttpClient.cancel("taggiventorequest");
Run Code Online (Sandbox Code Playgroud)

但请求没有取消我收到改造的回复不知道为什么它没有取消我的请求

我需要排球,比如取消改造

Ark*_*ung 6

作为Retrofit API Spec,取消请求将包含在2.0版中.

收到回复后,cancel()是无操作.在所有其他情况下,该方法将任何回调设置为null(因此,如果匿名声明,则释放对封闭类的强引用)并将请求对象渲染为死.将来与请求对象的所有交互都将引发异常.如果请求在执行程序中等待,则其Future将被取消,以便永远不会调用它.

现在,您可以通过创建自定义回调类来实现,该类在回调时通过Callback实现.

public abstract class CancelableCallback<T> implements Callback<T> {

    private boolean canceled;
    private T pendingT;
    private Response pendingResponse;
    private RetrofitError pendingError;

    public CancelableCallback() {
        this.canceled = false;
    }

    public void cancel(boolean remove) {
        canceled = true;
    } 

    @Override
    public void success(T t, Response response) {
        if (canceled) {
            return;
        }
        onSuccess(t, response);
    }

    @Override
    public void failure(RetrofitError error) {
        if (canceled) {
            return;
        }
        onFailure(error);
    }

    protected abstract void onSuccess(T t, Response response);

    protected abstract void onFailure(RetrofitError error);
}
Run Code Online (Sandbox Code Playgroud)

MyApi.java,

private interface MyApi {
    @GET("/")
    void getStringList(Callback<List<String>> callback);
}
Run Code Online (Sandbox Code Playgroud)

在活动或片段中,

RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint(Config.URL)
            .build();
MyApi service = restAdapter.create(MyApi.class);
CancelableCallback callback = new CancelableCallback<List<String>>() {
    @Override
    protected void onSuccess(List<String> stringList, Response response) {
        for (String str : stringList) {
            Log.i("Result : ", str);
        }
    }

    @Override
    protected void onFailure(RetrofitError error) {
        Log.e("Error : ", error.getMessage() + "");
    }
};

service.getStringList(callback);
Run Code Online (Sandbox Code Playgroud)

要取消您的请求,请致电

callback.cancel();
Run Code Online (Sandbox Code Playgroud)

这是取消每个请求的简单示例.您可以通过创建回调管理器类来同时处理(取消,暂停,恢复)两个或多个请求.请看一下评论以供参考.

希望它对你有用.


ism*_*a3l 3

问题是请求已完成,来自文档:

http://square.github.io/okhttp/javadoc/com/squareup/okhttp/OkHttpClient.html#cancel-java.lang.Object-

cancel
Run Code Online (Sandbox Code Playgroud)

public OkHttpClient 取消(对象标签)

取消所有带有标签的预定或飞行中呼叫。已完成的请求无法取消。

  • 请求没有取消,仍然没有发送响应 我在单击取消按钮后收到响应 (3认同)