retrywhen实现重连(kotlin)

kotlin-retry:用于重试可能失败的操作的高阶函数 立即下载

相信大多数人都在用rxjava+retrofit网络框架,在用着框架的时候我们不难发现,一些复杂,连续请求不再复杂,那么我今天提到的retrywhen操作符作用是什么呐?

  在我们开发过程中肯定有网络请求断开,失败的情况,可是用户的网络立马又回复正常了,这时候我们突然给用户toast一个网络请求失败,很明显这种体验度不是很好.下面我就贴上我用retrywhen实现重连请求的代码:

val loginService = Retrofit.Builder().addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .addConverterFactory(GsonConverterFactory.create())
        .baseUrl("")
        .client(OkHttpClient.Builder()
                .readTimeout(15, TimeUnit.SECONDS)
                .writeTimeout(15, TimeUnit.SECONDS)
                .connectTimeout(5, TimeUnit.SECONDS)
                .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
                .build())
        .build().create(Api.LoginService::class.java)
loginService.doLogin("", "", "")
        .retryWhen { throwableObservable ->
            throwableObservable.flatMap<Any> { throwable ->
                   //--是网络异常或者i/o并且重连次数小于3就重新发送请求
                if (throwable is IOException && ++retrycount < 3) {
                    Log.e("--throwable-", "第" + retrycount + "次重试")
                    Observable.timer(3, TimeUnit.SECONDS)
                } else
                    Observable.error<Any>(throwable)
            }
        }
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(object : BaseObserver() {
            override fun onNext(t: Any) {

            }

            override fun onError(e: Throwable) {
            }
        })

   

使用ST-LINK烧录stm32教程说明 使用ST-LINK烧录stm32 阅读详情

相关推荐

MCGS 和 200SMART 时间同步

在实际应用中,PLC经常会因为断电原因,导致时间不准确。假设我们设置了一个投加泵,每天8-18点投加。屏幕上显示的时间和PLC内部的时间,很可能不一样。所以需要在触摸屏上读取PLC的时间,并且提供设置功能。

mmxxoo_xxmmp的博客 1520

RxJava(六)retryWhen 操作符实现错误重试机制

RxJava系列文章目录导读: 一、RxJava create操作符的用法和源码分析 二、RxJava map操作符用法详解 三、RxJava flatMap操作符用法详解 四、RxJava concatMap操作符用法详解 五、RxJava onErrorResumeNext操作符实现app与服务器间token机制 六、RxJava retryWhen操作符...

Chiclaim 3万+

新手必看:手把手教你如何通过Github提交CVE漏洞(附完整截图流程)

本文为安全研究新手提供了一份详尽的CVE漏洞提交实战指南。文章重点介绍了如何通过Github平台,从漏洞发现、验证、撰写专业报告到最终提交CVE申请的全流程,并附有完整的截图和沟通模板,帮助初学者迈出负责任漏洞披露的第一步。

ttt77的博客 1252

rxjava : 错误处理操作符 (1):retry 、 retryUntil 、 retryWhen

参考:[Android开发] RxJava2之路七 - 错误处理操作符例子Demo retry操作符 重试的意思,拦截到错误,然后让 被观察者重新发射数据。Throwable和Exception都额可以拦截 它有五种参数方法: retry(): 让被观察者重新发射数据,要是一直错误就一直发送了 retry(BiPredicate): interger是第几次重新发送,Throwable是错...

火星男孩的分享空间 4359

从.har文件到Postman集合:一键转换的完整教程(附避坑指南)

本文详细介绍了如何将.har文件高效转换为Postman集合的完整教程,涵盖基础操作到高级技巧,包括认证信息处理、环境变量提取等痛点问题的解决方案。通过抓包工具记录的.har文件,开发者可以快速生成Postman集合,提升API调试与测试效率,特别适合前后端分离开发模式下的团队协作。

weixin_26795617的博客 384

Crossbar RRAM技术解析:从1TnR架构到存储革命

非易失性存储器(NVM)是数据存储的核心技术,其原理基于物理状态的稳定改变以实现数据持久化。阻变存储器(RRAM)作为一种新兴NVM,利用导电细丝在介质层中的形成与断裂实现数据存储,具有高速、低功耗和结构简单的优势。在工程实践中,RRAM面临潜行路径电流等挑战,而Crossbar提出的1TnR架构通过引入共享晶体管有效解决了这一问题,在保证性能的同时提升了集成密度。该技术与CMOS工艺兼容,支持后端集成与多层堆叠,为高密度存储和嵌入式应用提供了新的解决方案。结合当前行业对高能效、高密度存储的需求,RRAM在

weixin_42523104的博客 320

Rxjava操作符(defer,compose,retryWhen)

上一篇博客讲了Retrofit的简单使用,应该看过的都基本了解我们公司这个服务器请求网络数据的流程,我来简单梳理一下: 第一次登录,创建cookiejar,请求服务器数据,保存accesstoken到本地 请求其他网络数据,使用已存在的cookiejar,传入本地保存的accesstoken基本上是这样,但是在实际操作中,用户可能登录之后,过了很久才去请求其他数据,这时候cookie已经失效就

浅浅清风的博客 3793

AI落地困局与破局者FDE:从技术神话到价值实干的战略转型

AI落地困局与破局者FDE:从技术神话到价值实干的战略转型 当前AI企业级应用面临三大核心挑战:业务场景深度非标化、技术落地"最后一公里"困局、以及市场竞争焦点转向实用价值。前线部署工程师(FDE)作为破局关键,通过技术-业务-产品三维交汇的复合能力,将AI从实验室推向生产环境。FDE不仅是技术架构师,更是业务价值挖掘机和产品进化传感器,通过"碎石路-高速公路"双循环模式,将定制化需求沉淀为可复用的平台能力。这种模式颠覆了传统SaaS的销售逻辑,形成基于价值的J型增长

随笔记录-分享&记忆 3993

java 指数退避算法_对RxJava中.repeatWhen()和.retryWhen()操作符的思考

译者: 小鄧子状态: 完成译者注:为了方便因Lambda(译文)还不够了解的同学进行阅读,本篇译文替换了原文中全部Lambda表达式。第一次见到.repeatWhen()和.retryWhen()这两个操作符的时候就非常困惑了。不得不说,它们绝对是“最令人困惑弹珠图”的有力角逐者。然而它们都是非常有用的操作符:允许你有条件的重新订阅已经结束的Observable。我最近研究了它们的工作...

weixin_42363662的博客 633

QT与Coin3D实现机器人的仿真

前言 Coin3D编程环境配置好后,开始下一步的机器人仿真任务。本文根据在研5轴机器人,完成三维模型生成与机器人的仿真。主要参考博主冯Jungle的博客,在此表示感谢。 ——2021.05.23 环境 Win10:VS2019、QT5.15.2、Coin3D、SolidWorks2016 机器人三维模型生成 目前广泛应用于因特网的VRML ( Virtual Reality Modeling Language,虚拟现实建模语言)为用户提供一种可参与的、并能对场景中对象主动做出反应的虚拟现实环境,现已成

焦露的博客 6907

大疆 2021 嵌入式笔试题

在深圳做嵌入式,大疆公司绝对是 Top 级别的,大疆的技术栈也很深。

qq_38769551的博客 2496

kotlin协程flow retry retryWhen(2)

kotlin协程flow retry retryWhen(2)二、retryWhen。

Zhang Phil 1350

11.8 LangGraph生产级AI Agent开发:从节点定义到高并发架构的终极指南

本文介绍了如何使用 LangGraph 构建生产级 AI Agent,重点解析了 LangGraph 的核心设计、节点与边的实现方法论、生产级实现技巧以及性能优化策略。LangGraph 通过图结构抽象复杂 AI 工作流,核心组件包括节点、边、状态和检查点。节点通过 Python 函数封装原子业务逻辑,边通过条件分支实现动态工作流。生产级实现技巧包括状态管理、多会话控制和错误处理机制。性能优化策略涉及并行执行和缓存机制设计。文章还提供了旅行规划 Agent 的实战案例和常见问题解决方案,帮助开发者构建高效、

yonggeit的博客 3268

kotlin协程flow retryWhen当功能函数加载失败后重试(3)

kotlin协程flow retryWhen当功能函数加载失败后重试(3)加载一次失败,重试1次成功。

Zhang Phil 1424

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

kotlin协程flow任务意外结束未emit数据retryWhen onEmpty(5)

一、flow ,emit,onCompletion,collect。kotlin协程flow retryWhen当功能函数加载失败后重试(3)_zhangphil的博客-优快云博客。kotlin协程flow retryWhen当功能函数加载失败后重试(3)加载一次失败,重试1次成功。kotlin协程flow retryWhen当功能函数加载失败后重试(3)_zhangphil的博客-优快云博客。kotlin协程flow retryWhen当功能函数加载失败后重试(3)加载一次失败,重试1次成功。

Zhang Phil 730

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

用通俗易懂 + Android 开发实战的方式,详细讲解 Kotlin Flow 中的 retryWhen 操作符

摘要:Kotlin Flow的retryWhen操作符提供了智能重试机制,允许开发者根据异常类型、重试次数等条件灵活控制重试逻辑。相比简单的retry(n),它能实现更精细的控制,如仅对特定异常重试、指数退避延迟或手动触发重试。通过Android实战示例展示了如何结合网络请求错误处理、UI交互(如重试按钮)来构建健壮的流程。关键注意事项包括避免无限重试、添加延迟、区分可恢复错误等。retryWhen是处理网络请求失败等场景的推荐方案,能显著提升应用容错性和用户体验。

qq_23921815的博客 467

Kotlin MutableStateFlow

debounce蕴含了一定的缓冲思想,即,不立刻触发事件,而是先把要发射的数据进入队列,稍等一定时间(时间)延迟触发,而触发的重要条件取决于前一条数据和后一条数据的时间间隔,注意,前一条和后一条尚未被发射出去,只是待命中。debounce蕴含了一定的缓冲思想,即,不立刻触发事件,而是先把要发射的数据进入队列,稍等一定时间(时间)延迟触发,而触发的重要条件取决于前一条数据和后一条数据的时间间隔,注意,前一条和后一条尚未被发射出去,只是待命中。A和AB都待发射,A和AB间隔100,所以跳过A,直接发射AB。

Zhang Phil 1460

kotlin协程flow retryWhen当加载失败后重试功能函数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.youkuaiyun.com/zhangphil/article/details/130092299。加载一次失败,重试1次成功。

chuyouyinghe的专栏 493

Kotlin协程flow,firstOrNull只要最先first,lastOrNull只要最后

firstOrNull() //虽然发射很多数据,但只要第1次发射过来的数据。.lastOrNull() //虽然发射很多数据,但只要最后1次发射过来的数据。emit(i)delay(10)kotlin协程flow任务意外结束未emit数据retryWhen onEmpty(5)_zhangphil的博客-优快云博客一、flow ,emit,onCompletion,collect。

Zhang Phil 1388

基于Kotlin中Flow扩展重试方法

最近项目中统一采用Kotlin的Flow来重构了网络请求相关代码。Flow提供了和。

折翅鵬的博客 949

Kotlin协程:Flow的异常处理

示例代码如下:一.catch方法 catch方法用于捕获上游流产生的异常,代码如下: catch方法是Flow接口的扩展方法,并返回一个Flow类型的对象。在catch方法中,调用flow方法创建了一个Flow对象。 catch方法核心是通过catchImpl方法实现异常的捕获,如果成功捕获到异常,则回调参数action处理。这里参数action是FlowCollector接口的扩展方法,因此可以继续调用emit方法,向下游发送值。 当下游调用collect方法时,会触发catch方

鸿蒙的技术博客 1211

Kotlin Coroutines Flow 系列(三) 异常处理

五. Flow 异常处理Flow 可以使用传统的 try...catch 来捕获异常:fun main() = runBlocking { flow { emit...

Java与Android技术栈 1511

如何在 Android + Kotlin 中自动重试网络请求

2023 年的三种流行方式:RxJava / Coroutines / OkHttp应用的一种常见业务是错误处理,网络重试便是要处理的业务之一,当网络状况不理想时,这种状况就会出现。当然,如果所有重试都失败,自动重试不会阻止我们向用户显示某种“重试按钮”,也不会阻止我们实施其他可能的策略,例如对 Internet 可用性做出反应。但让我们关注本文中的第一个选项。

虎哥LoveDroid 1513

Kotlin Flow 开发者核心技术文档

Flow(数据流) 是建立在 Kotlin 协程之上的异步冷流。上游(数据源/生产者):负责生产数据、往水管里泼水(使用 emit 发射)。中途(操作符/加工者):负责对流经的数据进行过滤、转换、拦截(如 map、filter、takeWhile)。下游(终止操作符/消费者):负责在水管末端接水(使用 collect、launchIn 消费),只有下游开始接水,上游的代码才会真正跑起来(这就是“冷流”特性)。

琦琦的博客 416

Kotlin 协程七 —— Flow

Flow是Kotlin协程中处理异步数据流的核心API,可分为三类:数据流(Flow)、事件流(SharedFlow)和状态流(StateFlow)。Flow类似于支持协程的Sequence,采用惰性生产方式,数据在collect时才动态生成。其核心原理是每次collect都会重新执行flow构建器内的代码,实现独立的数据流处理。相比Channel,Flow更适合作为上层功能工具,提供更完整的数据流处理能力。Flow支持各种操作符,能实现复杂的数据转换和处理逻辑,是Kotlin协程中处理异步数据流的推荐方案

tmacfrank 1660
上一篇: kotlin中引用run函数的坑
下一篇: ViewPager 要被废弃?官方ViewPager2升级版来临
ZyClient
博客等级 码龄10年 29粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值