简述app开发流程免费seo网站的工具

news/2025/10/8 8:50:23/文章来源:
简述app开发流程,免费seo网站的工具,做网站是干什么的,信用泰安网站此文介绍了RxJava处理业务异常的几种方式#xff0c;分享给大伙。具体如下#xff1a;关于异常Java的异常可以分为两种#xff1a;运行时异常和检查性异常。运行时异常#xff1a;RuntimeException类及其子类都被称为运行时异常#xff0c;这种异常的特点是Java编译器不去…此文介绍了RxJava处理业务异常的几种方式分享给大伙。具体如下关于异常Java的异常可以分为两种运行时异常和检查性异常。运行时异常RuntimeException类及其子类都被称为运行时异常这种异常的特点是Java编译器不去检查它也就是说当程序中可能出现这类异常时即使没有用try...catch语句捕获它也没有用throws字句声明抛出它还是会编译通过。检查性异常除了RuntimeException及其子类以外其他的Exception类及其子类都属于检查性异常。检查性异常必须被显式地捕获或者传递。当程序中可能出现检查性异常时要么使用try-catch语句进行捕获要么用throws子句抛出否则编译无法通过。处理业务异常业务异常指的是正常的业务处理时由于某些业务的特殊要求而导致处理不能继续所抛出的异常。在业务层或者业务的处理方法中抛出异常在表现层中拦截异常以友好的方式反馈给使用者以便其可以依据提示信息正确的完成任务功能的处理。1. 重试不是所有的错误都需要立马反馈给用户比如说在弱网络环境下调用某个接口出现了超时的现象也许再请求一次接口就能获得数据。那么重试就相当于多给对方一次机会。在这里我们使用retryWhen操作符它将错误传递给另一个被观察者来决定是否要重新给订阅这个被观察者。听上去有点拗口直接上代码吧。/*** 获取内容* param fragment* param param* param cacheKey* return*/public Maybe getContent(Fragment fragment, ContentParam param, String cacheKey) {if (apiService null) {apiService RetrofitManager.get().apiService();}return apiService.loadContent(param).retryWhen(new RetryWithDelay(3,1000)).compose(RxLifecycle.bind(fragment).toLifecycleTransformer()).compose(RxUtils.toCacheTransformer(cacheKey));}这个例子是一个网络请求compose的内容可以忽略。如果网络请求失败的话会调用retryWhen操作符。RetryWithDelay实现了Function接口RetryWithDelay是一个重试的机制包含了重试的次数和重试时间隔的时间。import com.safframework.log.L;import org.reactivestreams.Publisher;import java.util.concurrent.TimeUnit;import io.reactivex.Flowable;import io.reactivex.annotations.NonNull;import io.reactivex.functions.Function;/*** 重试机制* Created by tony on 2017/11/6.*/public class RetryWithDelay implements Function, Publisher {private final int maxRetries;private final int retryDelayMillis;private int retryCount;public RetryWithDelay(final int maxRetries, final int retryDelayMillis) {this.maxRetries maxRetries;this.retryDelayMillis retryDelayMillis;this.retryCount 0;}Overridepublic Publisher apply(NonNull Flowable extends Throwable attempts) throws Exception {return attempts.flatMap(new Function() {Overridepublic Publisher apply(Throwable throwable) throws Exception {if (retryCount maxRetries) {L.i(RetryWithDelay, get error, it will try after retryDelayMillis millisecond, retry count retryCount);// When this Observable calls onNext, the original// Observable will be retried (i.e. re-subscribed).return Flowable.timer(retryDelayMillis, TimeUnit.MILLISECONDS);} else {// Max retries hit. Just pass the error along.return Flowable.error(throwable);}}});}}如果运气好重试成功了那用户在无感知的情况下可以继续使用产品。如果多次重试都失败了那么必须在onError时做一些异常的处理提示用户可能是网络的原因了。2. 返回一个默认值有时出错只需返回一个默认值有点类似Java 8 Optional的orElse()RetrofitManager.get().adService().vmw(param).compose(RxLifecycle.bind(fragment).toLifecycleTransformer()).subscribeOn(Schedulers.io()).onErrorReturn(new Function() {Overridepublic VMWModel apply(Throwable throwable) throws Exception {return new VMWModel();}});上面的例子使用了onErrorReturn操作符表示当发生错误的时候发射一个默认值然后结束数据流。所以 Subscriber 看不到异常信息看到的是正常的数据流结束状态。跟它类似的还有onErrorResumeNext操作符表示当错误发生的时候使用另外一个数据流继续发射数据。在返回的被观察者中是看不到错误信息的。使用了onErrorReturn之后onError是不是就不做处理了onErrorReturn的确是返回了一个默认值如果onErrorReturn之后还有类似doOnNext的操作并且doOnNext中出错的话onError还是会起作用的。曾经遇到过一个复杂的业务场景需要多个网络请求合并结果。这时我使用zip操作符让请求并行处理等所有的请求完了之后再进行合并操作。某些请求失败的话我使用了重试机制某些请求失败的话我给了默认值。3. 使用onError处理异常现在的Android开发中网络框架是Retrofit的天下。在接口定义的返回类型中我一般喜欢用Maybe、Completable来代替Observable。我们知道RxJava在使用时观察者会调用onNext、onError、onComplete方法其中onError方法是事件在传递或者处理的过程中发生错误后会调用到。下面的代码分别封装两个基类的Observer都重写了onError方法用于处理各种网络异常。这两个基类的Observer是在使用Retrofit时使用的。封装一个BaseMaybeObserverimport android.accounts.NetworkErrorExceptionimport android.content.Contextimport com.safframework.log.Limport io.reactivex.observers.DisposableMaybeObserverimport java.net.ConnectExceptionimport java.net.SocketTimeoutExceptionimport java.net.UnknownHostException/*** Created by Tony Shen on 2017/8/8.*/abstract class BaseMaybeObserver : DisposableMaybeObserver() {internal var mAppContext: Contextinit {mAppContext AppUtils.getApplicationContext()}override fun onSuccess(data: T) {onMaybeSuccess(data)}abstract fun onMaybeSuccess(data: T)override fun onError(e: Throwable) {var message e.messageL.e(message)when(e) {is ConnectException - message mAppContext.getString(R.string.connect_exception_error)is SocketTimeoutException - message mAppContext.getString(R.string.timeout_error)is UnknownHostException - message mAppContext.getString(R.string.network_error)is NetworkErrorException - message mAppContext.getString(R.string.network_error)else - message mAppContext.getString(R.string.something_went_wrong)}RxBus.get().post(FailedEvent(message))}override fun onComplete() {}}封装一个BaseCompletableObserverimport android.accounts.NetworkErrorExceptionimport android.content.Contextimport com.safframework.log.Limport io.reactivex.observers.ResourceCompletableObserverimport java.net.ConnectExceptionimport java.net.SocketTimeoutExceptionimport java.net.UnknownHostException/*** Created by Tony Shen on 2017/8/8.*/abstract class BaseCompletableObserver : ResourceCompletableObserver() {internal var mAppContext: Contextinit {mAppContext AppUtils.getApplicationContext()}override fun onComplete() {onSuccess()}abstract fun onSuccess()override fun onError(e: Throwable) {var message e.messageL.e(message)when(e) {is ConnectException - message mAppContext.getString(R.string.connect_exception_error)is SocketTimeoutException - message mAppContext.getString(R.string.timeout_error)is UnknownHostException - message mAppContext.getString(R.string.network_error)is NetworkErrorException - message mAppContext.getString(R.string.network_error)else - message mAppContext.getString(R.string.something_went_wrong)}RxBus.get().post(FailedEvent(message))}}在这里用到了Kotlin来写这两个基类使用Kotlin的目的是因为代码更加简洁避免使用switch或者各种if(XX instancof xxException)来判断异常类型可以跟Java代码无缝结合。下面的代码展示了如何使用BaseMaybeObserver即使遇到异常BaseMaybeObserver的onError也会做相应地处理。如果有特殊的需求也可以重写onError方法。model.getContent(VideoFragment.this,param, cacheKey).compose(RxJavaUtils.maybeToMain()).doFinally(new Action() {Overridepublic void run() throws Exception {refreshlayout.finishRefresh();}}).subscribe(new BaseMaybeObserver(){Overridepublic void onMaybeSuccess(ContentModel data) {adpter.addDataToFront(data);}});4. 内部异常使用责任链模式来分发这是微信中一位网友提供的方法他做了一个很有意思的用于异常分发的一个库github地址https://github.com/vihuela/Retrofitplus内部异常使用责任链分发分发逻辑为自定义异常-网络异常-服务器异常-内部程序异常-未知异常除了以上自定义异常之外此库包含其它异常分发默认适应场景为RxJson自定义异常使用请调用ExceptionParseMgr类的addCustomerParser方法添加业务异常这个库对原先的代码无侵入性。此外他还提供了另一种思路结合compose来处理一些特定的业务异常。总结此文仅仅是总结了个人使用RxJava遇到业务异常的情况并对此做了一些相应地处理肯定是不能覆盖开发的方方面面仅作为抛砖引玉如果有更好、更优雅的处理方式一定请告知。上面即是这篇文章的内容希望对各位的学习有所启发也希望大家多多支持学猫在线(shtml.net)。本文来源http://www.jianshu.com/p/423cc558556b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

福州网站建设服务平台淮安网站建设案例

在做项目过程中,需求是点击孔位单击弹出对话框查看产品总数,双击弹出对话框查看详情。一开始直接click和dblclick写在标签里面,但是不管怎么样,总是执行单击事件 解决办法:利用计时器,在大概时间模拟双击事…

主题资源网站建设模块五作业工商网站查询企业信息查询官网

Kendo UI是什么? 首先,Kendo UI是一个由四个JavaScript UI库组成的包,这些库是专为jQuery、Angular、React和Vue原生构建的,每一个都是用一致的API和主题构建的。所以无论开发者怎么选择,所开发的Web应用始终保持了现…

做网站佛山网页的设计与应用的论文

2024年5月系统架构设计师最新第2版教材对应的全套视频教程、历年真题及解析、章节分类真题及解析、论文写作及范文、教材、讲义、模拟题、答题卡等资料 1、2023年11月最新第2版本教材对应全套教程视频,2022年、2021年、2020年、2018年、2016年五套基础知识精讲视频、…

seo建站系统免费网站建设培训

简介 JsonInclude是 Jackson 库(Java 中用于处理 JSON 数据的流行库)中的一个注解。它用于控制在序列化 Java 对象为 JSON 时,哪些属性应该被包含在 JSON 输出中。这个注解提供了多种策略来决定属性的包含与否,帮助减少不必要的数…

企业自己做网站的成本怎么做自己优惠券网站

一、Linux与RTOS的区别 1.设计目标:Linux关注性能和多任务处理,RTOS追求实时响应和确定性。 2.调度方式:Linux对普通任务使用公平调度;对实时任务使用优先级调度或时间片轮转调度。而RTOS只采用优先级调度。 3.内存管理&#xff1…

网站建站安全需求网站被k十大原因

1. 题目 给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。 示例 1: 输入:…

网站建设备案计划书百度推广搜索排名

在上两篇文章中介绍了资源的设置及其成本计算,本篇文章将介绍与资源关联非常紧密的制造费用的设置及成本计算。1. 制造费用设置图 1. 制造费用主设置界面制造费用主设置界面如图1所示,成本要素选择”制造费用”,并设置制造费用的名称、说明、…

h5的aliplayer-min.js 加密视频会走到debugger - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

商业网站开发模式杭州网站建设出 名

用途 字符匹配 语法 常用元字符 []    区间范围框 枚举值  [a-z0-9A-Z_] |    分枝条件或 \    特殊转义符(取消转义) \W [^A-Za-z0-9_] [\r\n] 换行符匹配 [\u4e00-\u9fa5] 汉字 [\s\S] 任意字符 限定符 贪婪匹配&…

云安全挑战与AI时代防护策略

本特别报告深入探讨云安全面临的独特挑战、当前企业面临的安全威胁规模,以及AI技术快速普及如何加剧安全问题。您将了解如何发现潜在风险,并掌握保护云环境的关键策略与最佳实践。本特别报告探讨了云安全的独特挑战、…

python“锈化”库替代,性能更快的库

ruff(替代 flake8 + black + isort):超快的 Python 代码检查和格式化工具,比 flake8 快 50 倍。 polars(替代 pandas):高性能 DataFrame 计算库,采用 无 GIL、多线程优化,比 pandas 处理大数据快得多。 matur…

郴州做网站公司上海网站的建设

通过添加语言,你可以更改用于在 Windows、应用和 Web 中读取和写入的语言。添加语言若要更改你的 Windows 显示语言或者添加键盘以进行键入,首先要将一种语言添加到语言列表中。从屏幕右边缘向中间轻扫,点击“设置”,然后点击“更…

docker B站学习 - 实践

docker B站学习 - 实践2025-10-08 08:12 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font…

VSCODE - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

织梦可以做移动网站吗南京装修公司

我们在使用python过程中,为了避免错误删除,会选择做好一个序列后可以插入另外的序列中做为新序列的一部分内容。方便完成一些复杂的工程或多个片段分别编辑后再串成一个完整工程的操作。之前小编向大家介绍了在序列中起到累计作用的reduce函数(https://w…

大语言模型时代计算语言学新进展

本文探讨了大语言模型在计算语言学领域的最新发展,重点分析了模型幻觉问题的多种解决方案,包括后处理验证、数据质量控制和激活编辑等技术手段,同时讨论了模型训练优化与人类反馈强化学习等前沿研究方向。ACL 2023:…

免费推广网站推荐西安市高新区建设规划局网站

首先yowov2是一款简单且实时的时空动作检测方案,fastreid是行人重识别(身份识别) yowov2介绍链接直达fastreid链接直达为时空动作检测任务设计实时框架仍然是一个挑战。YOWOv2 提出了一种新颖的实时动作检测框架,利用三维骨干和二…

提高组热身赛小计(非题目顺序)

提高组热身赛小计(非题目顺序)热身赛题目T1商务旅行 题意 给定一棵 N 个结点的树,所有边的权值均为 1。从结点 1 出发,依次经过 M 个指定结点,求路径总长度的最小值。 思路 代码首先通过深度优先搜索(DFS)预处理出…

做国外直播网站东莞常平做网站

【多选题】下列关于多行注释的应用,正确的是( )【单选题】是在思维中把对象分解为各个部分、侧面、属性以及阶段,分别加以考察的方法。(1.0分)【判断题】多行注释“/*...*/”中不可以嵌套单行注释“//”。( )【多选题】直觉具有( )等特性。(2.0分)【多选题】马克思主义科学技术…

移动端 pc网站开发中国好公司网站建设

Gartner通过信任、增长和变革三大新兴技术趋势主题发布推动创新的关键新兴技术。需特别关注非同质化通证、量子机器学习、生成式人工智能、同态加密以及组装式应用和网络等关键技术 编辑 | 宋慧 供稿 | Gartner 头图 | 付费下载于视觉中国 根据全球领先的信息技术研究和顾问公…