zoukankan      html  css  js  c++  java
  • [RxJava^Android]项目经验分享 --- 异常方法处理

    简单介绍一下背景,最近RxJava很火,我也看来学习一下,计划在项目的独立模块中使用它。使用过程中遇到很多问题,在这里记录分享一下。可能有使用不当的地方,大家多多包涵。对于RxJava的基本概念和功能原理就不做介绍了。

    变换操作时,使用的方法是抛出异常的,如何处理:

    开始使用map操作,发现处理异常时,不能在订阅(Subscriber)的时候观察到onError。

    代码块

        public String changeFun(int i) throws Exception {
            if (i == 100) {
                throw new Exception("i == 100");
            } else {
                return "OK";
            }
        }
    
        public void test() {
            Observable.just(100).map((Integer integer) -> {
                try {
                    return changeFun(integer);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return "";
            }).subscribe(new Subscriber<String>() {
                @Override
                public void onCompleted() {
    
                }
    
                @Override
                public void onError(Throwable e) {
    
                }
    
                @Override
                public void onNext(String s) {
    
                }
            });
        }
    

    针对上面问题修改为操作符flatMap进行实现。

    代码块

            public String changeFun(int i) throws Exception {
                if (i == 100) {
                    throw new Exception("i == 100");
                } else {
                    return "OK";
                }
            }
        
            Observable.just(100).flatMap(integer -> Observable.create(subscriber -> {
                try {
                    subscriber.onNext(changeFun(integer));
                    subscriber.onCompleted();
                } catch (Exception e) {
                    subscriber.onError(e);
                }
            })).subscribe(new Subscriber<String>() {
                @Override
                public void onCompleted() {
                    Log.d(TAG, "onCompleted");
    
                }
    
                @Override
                public void onError(Throwable e) {
                    Log.d(TAG, "onError:" + e.toString());
                }
    
                @Override
                public void onNext(String s) {
                    Log.d(TAG, "onNext:" + s);
                }
            });
    

    flatMapmap在使用过程中的区别在于 flatMap返回Observable,而map返回Object。工作原理的差别自行查阅一下吧。

  • 相关阅读:
    Git的使用---6. 分支管理
    Git的使用---5. 工作区、暂存区和仓库
    虚拟机中安装 win2012 r2 tools工具 提示需要安装kb2919355
    【实验】OSPF的基本配置
    【实验】 OSPF和BFD联动
    【实验】VRRP+链路跟踪+BFD联动
    【实验】基于接口和全局DHCP
    【实验】静态LACP的链路聚合
    【实验】手工负载分担链路聚合
    【实验】vxlan的静态配置
  • 原文地址:https://www.cnblogs.com/assassin-l/p/5054537.html
Copyright © 2011-2022 走看看