//这是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内容。相关推荐

  1. (转)linux下cp目录时排除一个或者多个目录的实现方法

    方法二:使用cp命令复制的时候,只能排除一个目录不被复制,如果想排除两个或者多个目录的话,就需要使用rsync命令来实现了,看下面的例子 如果要排除/home/data目录下面的a.b.c.三个目录, ...

  2. 在ASP.NET MVC中使用Log4Net记录异常日志,出错时导向到静态页

    本篇体验在ASP.NET MVC 4中使用Log4Net记录日志. 通过NuGet安装Log4Net. 需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息. 大致的思路是: ...

  3. SAP UI5 应用开发教程之三十八 - 使用 Chrome 开发者工具查看程序执行出错时的上下文信息

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  4. 自学java编译老是出错_编写HelloWorld程序编译时提示写入HelloWorld时出错是什么意思...

    编写HelloWorld程序编译时提示写入HelloWorld时出错是什么意思 这个能出错的地方就难说了,能给出代码或者错误提示吗 为什么javac编译后说写入错误呢HelloWorld.java : ...

  5. ArcMap 小知识(3):在ArcGIS中导出数据时显示“保存对象时出错”

    点赞和关注是我创作的最大动力~~ 在ArcGIS中导出数据时显示"保存对象时出错" 注意在"Saving Data(保存数据)"对话框的下方有"Sav ...

  6. 如何让Symbian S60系统出错时显示更多的错误信息

    [阿赖原创文章,转贴务必指明原文链接出处] 这个问题我在使用N-Gage时深有体会,遇到程序出错往往是出现一个简单的提示"系统出错"然后退出,搞得莫名其妙,知其然,不知其所以然.现 ...

  7. 如何构造一个出错的压缩包

    如何构造一个出错的压缩包 怎么制造一个只能解压一半的压缩包(即解压到一半出错的)? 这个问题其实需要看具体情况,看解压的那个程序的容忍程度. 这里就以两个解压的程序作为例子: 1. Windows下的 ...

  8. PyQt5随笔:PyQt5 程序在开机自启动时读取文件出错导致崩溃解决办法

    PyQt5随笔:PyQt5 程序在开机自启动时读取文件出错导致崩溃解决办法 1.前言 最近在写一个 Python+pyqt5 小项目,在改善过程中想添加一个日志记录,我是打算用txt 文件记录就好,操 ...

  9. 基于ubuntu-20.04.3的snort+Barnyard2+BASE的入侵检测系统安装时Barnyard2反编译时出错解决

    基于ubuntu-20.04.3的snort+Barnyard2+BASE的入侵检测系统安装时Barnyard2反编译时出错解决 在按照https://www.modb.pro/db/159797大佬 ...

最新文章

  1. javax/management/DynamicMBean
  2. 初学python者自学anaconda的正确姿势
  3. 全球IPv4地址正式耗尽,你知道吗?
  4. 如何在SAP WebClient UI里使用HANA Live report
  5. SVN安装和使用总结
  6. 面向 Web 前端的原生语言总结手册
  7. 重写laravel的request的校验器
  8. 华为HCIE7-中间系统到中间系统的路由泄露、防环、认证和优化机制
  9. C#学习笔记_12_枚举结构体
  10. Component template should contain exactly one root element---基于Vue的uniapp手机端_前端UI_uview工作笔记002
  11. HDFS伪分布式集群搭建
  12. 导航守卫与keep-alive
  13. PSD网页切图制作HTML全过程教程
  14. 支付宝、京东支付场景之策略模式实战
  15. 计算机拒绝访问移动硬盘,移动硬盘无法访问拒绝访问,教你移动硬盘无法访问拒绝访问怎么办...
  16. qt样式表设置边框_Qt样式表之 QSS 语法介绍
  17. 如何设计SEO关键字分析统计表
  18. 大型网吧网络系统设计详细方案(转)
  19. Kubernetes 健康状态检查(九)
  20. 大小口圆锥台计算机,2011年对口单招计算机试卷A04(18页)-原创力文档

热门文章

  1. java客户服务器程序预约口罩_团队作业(二):Github实训:口罩预约
  2. java中mymaps_Java MyLocationStyle.myLocationType方法代码示例
  3. 小米五android o卡吗,【图片】小米5优化教程,吃鸡卡的进来!!!_小米5吧_百度贴吧...
  4. 基于单片机的水壶自动加热系统_基于烟雾检测火灾自动报警系统
  5. python程序保存_初识python 文件读取 保存
  6. sql 忽略大小写_Flink使用Calcite解析Sql做维表关联(一)
  7. oracle 数据分析函数,ORACLE分析函数(一)
  8. 蓝桥杯 密文搜索(全排列)
  9. 什么是CPU的虚拟化技术?优势又是什么
  10. 说说项目从0-1过程中的那点事儿