RxJava from 处理list时,其中有一个出错时如何继续发送下面的list内容。
//这是LocalTransRecordPresenter.java
//这是LocalTransRecordPresenter.javapublic class LocalTransRecordPresenter extends Presenter<LocalTransRecordActivity> {public void pQueryFlowInfoByBatchNo2(List<SingleFlowEntity> mSingleFlowEntity) {if (!CheckNetIsOk.isNetOk(getView())) {return; }subscribe2(createUrlObservable2(mSingleFlowEntity)); }private void subscribe2(Observable<TransResponse> observable) {observable.subscribe(new Action1<TransResponse>() {@Override public void call(TransResponse s) {if(s!=null) {JUtils.Log(" ------------------ " + s.MESSAGE + " " + s.STATUS+ s.REMARK); }}}); /* observable.subscribe(new Action1<TransResponse>() { @Override public void call(TransResponse s) { JUtils.Log(" " + s.MESSAGE+" "+s.STATUS); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { throwable.printStackTrace(); JUtils.Log("throwable call()" + throwable.getMessage()); } });*/ }public Observable<TransResponse> createUrlObservable2(List<SingleFlowEntity> mSingleFlowEntity) {return Observable.from(mSingleFlowEntity).concatMap(new Func1<SingleFlowEntity, Observable<TransResponse>>() {@Override public Observable<TransResponse> call(SingleFlowEntity s) {return createFlowObservableMultiThread(s); }})/* .onErrorReturn(new Func1<Throwable, TransResponse>() { @Override public TransResponse call(Throwable throwable) { JUtils.Log("在onErrorReturn处理了:" + throwable.toString()); return null; } })*/ .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); }private synchronized Observable<TransResponse> createFlowObservableMultiThread(SingleFlowEntity s) {return Observable.create(new Observable.OnSubscribe<TransResponse>() {@Override public void call(Subscriber<? super TransResponse> subscriber) {TransResponse mTransResponse; try{mTransResponse = LocalTransRecordModel.getInstance().mQueryFlowInfoByBatchno2(s); JUtils.Log("createFlowObservableMultiThread:" + mTransResponse.STATUS + " " + mTransResponse.MESSAGE+" "+mTransResponse.REMARK); subscriber.onNext(mTransResponse); subscriber.onCompleted(); }catch (Exception e){JUtils.Log("createFlowObservableMultiThread: exception"); subscriber.onCompleted(); }}}); } }
//这是LocalTransRecordModel.java
public TransResponse mQueryFlowInfoByBatchno2(final SingleFlowEntity mSingleFlowEntity ) { JUtils.Log("-------------22----------------"); return ServiceClient.getService().queryTrade2(strEntity); }
//这是ServiceClient.java
public class ServiceClient {//读超时长,单位:毫秒 public static final int DEFAULT_TIME_OUT = 12; //连接时长,单位:毫秒 public static final int CONNECT_TIME_OUT = 12; private static Service mService; private static OkHttpClient okHttpClient; public static OkHttpClient getOkHttpClient(){if (okHttpClient==null){okHttpClient = new OkHttpClient(); okHttpClient.setReadTimeout(DEFAULT_TIME_OUT, TimeUnit.SECONDS); okHttpClient.setConnectTimeout(DEFAULT_TIME_OUT,TimeUnit.SECONDS); okHttpClient.setWriteTimeout(DEFAULT_TIME_OUT,TimeUnit.SECONDS); }return okHttpClient; }public static Service getService(){if (mService == null){createService(); }return mService; }public static void setServiceNull(){mService = null; }private static void createService(){mService = createAdapter().create(Service.class); }private static RestAdapter createAdapter(){// boolean isInDebugServer = JUtils.getSharedPreference().getBoolean("DebugServer",false); IPPORT.getInstance().getIpPort(); return new RestAdapter.Builder().setEndpoint(IPPORT.getInstance().getIpPort())/* .setRequestInterceptor(new HeaderInterceptors())*/ .setLogLevel(RestAdapter.LogLevel.FULL ).setConverter(new WrapperConverter()).setClient(new OkClient(getOkHttpClient()))/*.setRequestInterceptor(new HeaderInterceptors())*/ .build(); } }
//这是WrapperConverter.java
public class WrapperConverter implements Converter {private static final String CHARSET_DEFAULT = "utf-8"; private static final int BUFFER_SIZE = 0x400; private Gson gson; @Override public Object fromBody(TypedInput body, Type type) throws ConversionException {String result = getString(body); //JUtils.Log("result:"+result); TransResponse transResponse; transResponse = getGson().fromJson(result,TransResponse.class); if(null!=transResponse && API.CODE.SUCCEED.equals(transResponse.STATUS)){return transResponse; }else{/*ToastMakeUtils.showToast(TimesCountActivity.this, transResponse != null ? transResponse.MESSAGE : getString(R.string.parse_error));*/ throw new ServiceException( transResponse != null ? transResponse.STATUS:"[", transResponse != null ? transResponse.MESSAGE:"数据解析错误]"); } } }
//这是ServiceException.java
public class ServiceException extends ConversionException {private String status; private String message; public String getStatus() {return status; }public String getInfo() {return message; }public ServiceException(String status, String message) {super("ServiceException status:"+status+" message:"+message); this.status = status; this.message = message; }}
开始分析:
上面包含四个文件。
流程概述:Android activity在调用了 pQueryFlowInfoByBatchNo2() 后经过一系列的调用到 ServiceClient.getService().queryTrade2(strEntity) (Retrofit 访问服务器)。Retrofit这里对服务器返回的信息解析在WrapperConverter.java 中进行。 正常的时候返回TransResponse ,异常的是否抛出ServerException。
在函 数多少createFlowObservableMultiThread 接受到queryTrade2抛出的异常时如果调用subscriber.onCompleted(). 否则默认就调用onError()。如果调用了onError的话,from(list)就不会再发送后面的内容了。(例如{1,2,3,4}: 当2发送错误的时候,3和4就不会再被发送。 而catch了异常后使用onCompleted那么,3和4还是会被发送)
RxJava from 处理list时,其中有一个出错时如何继续发送下面的list内容。相关推荐
- (转)linux下cp目录时排除一个或者多个目录的实现方法
方法二:使用cp命令复制的时候,只能排除一个目录不被复制,如果想排除两个或者多个目录的话,就需要使用rsync命令来实现了,看下面的例子 如果要排除/home/data目录下面的a.b.c.三个目录, ...
- 在ASP.NET MVC中使用Log4Net记录异常日志,出错时导向到静态页
本篇体验在ASP.NET MVC 4中使用Log4Net记录日志. 通过NuGet安装Log4Net. 需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息. 大致的思路是: ...
- SAP UI5 应用开发教程之三十八 - 使用 Chrome 开发者工具查看程序执行出错时的上下文信息
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- 自学java编译老是出错_编写HelloWorld程序编译时提示写入HelloWorld时出错是什么意思...
编写HelloWorld程序编译时提示写入HelloWorld时出错是什么意思 这个能出错的地方就难说了,能给出代码或者错误提示吗 为什么javac编译后说写入错误呢HelloWorld.java : ...
- ArcMap 小知识(3):在ArcGIS中导出数据时显示“保存对象时出错”
点赞和关注是我创作的最大动力~~ 在ArcGIS中导出数据时显示"保存对象时出错" 注意在"Saving Data(保存数据)"对话框的下方有"Sav ...
- 如何让Symbian S60系统出错时显示更多的错误信息
[阿赖原创文章,转贴务必指明原文链接出处] 这个问题我在使用N-Gage时深有体会,遇到程序出错往往是出现一个简单的提示"系统出错"然后退出,搞得莫名其妙,知其然,不知其所以然.现 ...
- 如何构造一个出错的压缩包
如何构造一个出错的压缩包 怎么制造一个只能解压一半的压缩包(即解压到一半出错的)? 这个问题其实需要看具体情况,看解压的那个程序的容忍程度. 这里就以两个解压的程序作为例子: 1. Windows下的 ...
- PyQt5随笔:PyQt5 程序在开机自启动时读取文件出错导致崩溃解决办法
PyQt5随笔:PyQt5 程序在开机自启动时读取文件出错导致崩溃解决办法 1.前言 最近在写一个 Python+pyqt5 小项目,在改善过程中想添加一个日志记录,我是打算用txt 文件记录就好,操 ...
- 基于ubuntu-20.04.3的snort+Barnyard2+BASE的入侵检测系统安装时Barnyard2反编译时出错解决
基于ubuntu-20.04.3的snort+Barnyard2+BASE的入侵检测系统安装时Barnyard2反编译时出错解决 在按照https://www.modb.pro/db/159797大佬 ...
最新文章
- javax/management/DynamicMBean
- 初学python者自学anaconda的正确姿势
- 全球IPv4地址正式耗尽,你知道吗?
- 如何在SAP WebClient UI里使用HANA Live report
- SVN安装和使用总结
- 面向 Web 前端的原生语言总结手册
- 重写laravel的request的校验器
- 华为HCIE7-中间系统到中间系统的路由泄露、防环、认证和优化机制
- C#学习笔记_12_枚举结构体
- Component template should contain exactly one root element---基于Vue的uniapp手机端_前端UI_uview工作笔记002
- HDFS伪分布式集群搭建
- 导航守卫与keep-alive
- PSD网页切图制作HTML全过程教程
- 支付宝、京东支付场景之策略模式实战
- 计算机拒绝访问移动硬盘,移动硬盘无法访问拒绝访问,教你移动硬盘无法访问拒绝访问怎么办...
- qt样式表设置边框_Qt样式表之 QSS 语法介绍
- 如何设计SEO关键字分析统计表
- 大型网吧网络系统设计详细方案(转)
- Kubernetes 健康状态检查(九)
- 大小口圆锥台计算机,2011年对口单招计算机试卷A04(18页)-原创力文档
热门文章
- java客户服务器程序预约口罩_团队作业(二):Github实训:口罩预约
- java中mymaps_Java MyLocationStyle.myLocationType方法代码示例
- 小米五android o卡吗,【图片】小米5优化教程,吃鸡卡的进来!!!_小米5吧_百度贴吧...
- 基于单片机的水壶自动加热系统_基于烟雾检测火灾自动报警系统
- python程序保存_初识python 文件读取 保存
- sql 忽略大小写_Flink使用Calcite解析Sql做维表关联(一)
- oracle 数据分析函数,ORACLE分析函数(一)
- 蓝桥杯 密文搜索(全排列)
- 什么是CPU的虚拟化技术?优势又是什么
- 说说项目从0-1过程中的那点事儿