java – 如何取消改造请求

前端之家收集整理的这篇文章主要介绍了java – 如何取消改造请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我滚动浏览官方 documentation的Retrofit并决定在我的项目中实现类似的东西,这样用户总是可以选择取消下载文件,一切都能正常工作.实施适当的方法,如果未能规定以下内容
service.upload1(file1,str,stringMap,new Callback<ImageUpload>() {
            @Override
            public void success(final ImageUpload imageUpload,Response response) {
                mRecyclerView.post(new Runnable() {
                    @Override
                    public void run() {
                        ...
                });
            }

            @Override
            public void failure(RetrofitError error) {
                if (error.isCanceled()) {
                    Log.e(TAG,"request is cancelled");
                } else {
                    Log.e(TAG,"other larger issue,i.e. no network connection?");
                }
            }

但是红色的下划线是失败的方法.我不明白是什么问题,因为这个方法我们最初提出类Call(也许是因为发誓我而不是类Call是RetrofitError?)请告诉我如何修复.
我使用改装1.9,我不需要继续改造2.

解决方法

就记忆而言,error.isCanceled()似乎并没有出现在Retrofit中.如果你想能够取消一个请求,你可以切换到他们有call.cancel()方法的Retrofit 2,或者在当前版本的Retrofit中,你可以扩展Callback类来创建你自己的类CancellableCallback,就像这样:
public class CancellableCallback<T> implements Callback<T> {

    private Callback<T> callback;

    private boolean canceled;

    private CancellableCallback() {}

    public CancellableCallback(Callback<T> callback) {
        this.callback = callback;
        canceled = false;
    }

    public void cancel() {
        canceled = true;
        callback = null;
    }

    @Override
    public void success(T o,Response response) {
        if (!canceled) {
            callback.success(o,response);
        }
    }

    @Override
    public void failure(RetrofitError error) {
        if (!canceled) {
            callback.failure(error);
        }
    }
}

编辑

然后你可以像这样使用它:

CancellableCallback callback = new Callback<ImageUpload>() {
            @Override
            public void success(final ImageUpload imageUpload,Response response) {
                mRecyclerView.post(new Runnable() {
                    @Override
                    public void run() {
                        ...
                });
            }

            @Override
            public void failure(RetrofitError error) {

            }
    };

service.upload1(file1,callback);

然后像这样取消它:

if (some condition && callback != null) {
    callback.cancel();
}

猜你在找的Java相关文章