Skip to content

Latest commit

 

History

History
46 lines (32 loc) · 1.89 KB

5.Retryable.md

File metadata and controls

46 lines (32 loc) · 1.89 KB

目的

目的:学习请求重试api。

内容

在进阶教程第2篇的基础上,稍作修改,实现请求失败时,自动重试。

简介

请求重试也是很常见的需求,然而自己实现起来就没有那么方便,或者换句话说没那么优雅了。这主要是因为,安卓中的请求几乎都是异步执行的,要重试,得先等异步线程结束拿到结果后再判断是否要在执行一次。 对于这种情况,我们的框架优势就体现出来,要重试几次,其实就是同步的代码循环几次,这就让代码看起来非常舒服,然而,写循环依旧很麻烦,本框架封装了一个 RetryUtils。

效果

在中间显示 id 和 name。 点击屏幕后,触发刷新数据,请求失败时自动重试,最多重试2次。

准备

复制入门教程7的中2个类 WidgetActivityStatefulUserWidget

StatefulUserWidget

唯一需要改的是 task 调用 RetryUtils.create 创建一个可重试的 Runnable 任务。 第一个参数是最多重试次数,如果是0,则不重试。 第二个参数是 Callable 接口,里面的 call 方法返回 true 表示任务正常执行;返回 false 表示任务失败,将进行重试。

    private Runnable updateTask = RetryUtils.create(RETRY_COUNT, () -> {
        System.out.println("Time:" + new Date() + ", get data...");
        try {
            user = UserDataSource.getInstance().getUserFromRemoteWithRandomError();
            return true;
        } catch (Exception e) {
            user = null;
            return false;
        }
    });

之前也考虑过发生异常时进行重试,但这样并不够灵活,因为有可能没有异常,但业务需要而进行重试。

总结

到这里,你已经掌握了本框架的大部分用法。 框架的优势也很容易就体现出来了。