改造:如果没有网络,则取消通话

时间:2018-12-13 16:01:53

标签: java android retrofit

实际上,当我使用具有无线电频率的设备时,我的应用程序出现了问题。如果设备不在无线电范围内,但尝试发送文件,我将收到onFailure信息,在这里我向用户说没有网络,但是主要问题是设备返回了无线电范围,因此它返回了网络,无论如何,当我不在网络中时,它一直在发送我尝试发送的文件。

因此,我可以取消onFailure上的呼叫,但尝试放入call.cancel();。 onFailure不起作用。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以扩展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);
        }
    }