目的:学习请求重试api。
在进阶教程第2篇的基础上,稍作修改,实现请求失败时,自动重试。
请求重试也是很常见的需求,然而自己实现起来就没有那么方便,或者换句话说没那么优雅了。这主要是因为,安卓中的请求几乎都是异步执行的,要重试,得先等异步线程结束拿到结果后再判断是否要在执行一次。 对于这种情况,我们的框架优势就体现出来,要重试几次,其实就是同步的代码循环几次,这就让代码看起来非常舒服,然而,写循环依旧很麻烦,本框架封装了一个 RetryUtils。
在中间显示 id 和 name。 点击屏幕后,触发刷新数据,请求失败时自动重试,最多重试2次。
复制入门教程7的中2个类 WidgetActivity
和 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;
}
});
之前也考虑过发生异常时进行重试,但这样并不够灵活,因为有可能没有异常,但业务需要而进行重试。
到这里,你已经掌握了本框架的大部分用法。 框架的优势也很容易就体现出来了。