美文网首页
埋坑第一铲之rxjava嵌套访问

埋坑第一铲之rxjava嵌套访问

作者: 余生爱静 | 来源:发表于2017-02-20 16:04 被阅读137次

在学习rxjava的过程中,有遇到过关于rxjava嵌套请求的例子,但是都是理想的状态的,每个请求都是顺利完成请求的.但是,现实是残酷的,我的第一个demo就挂掉了,因为手机没有联网.网友解释说,就好比一个水管,一头不通就不通了,但是程序偏偏不这么搞,你必须让我通,不通就挂掉!我去,这个坑搞大了,千辛万苦,终于搞通了,嵌套请求必须保持一个原则:一定让请求通畅 一定让请求通畅 一定让请求通畅

我的这个栗子的背景是:登录成功后,获取七牛的一些数据

 public void login(View view) {
        final Api mApi = new Servise(MainActivity.this).Servise();
        mApi.Login("136****3307", "123456").observeOn(Schedulers.newThread()).flatMap(new Function<Login, ObservableSource<ResponseBody>>() {
            @Override
            public ObservableSource<ResponseBody> apply(Login login) throws Exception {
                if (login.getResultCode() == 1) {
                    return mApi.GetQiniu("" + login.getResultData().getUser().getId(), login.getResultData().getToken());
                } else {
                    return null;
                }

            }

         //此处是核心
        }, new Function<Throwable, ObservableSource<ResponseBody>>() {
            @Override
            public ObservableSource<ResponseBody> apply(Throwable throwable) throws Exception {
                Toast.makeText(mContext, "链接网络失败", Toast.LENGTH_LONG).show();
                return Observable.create(new ObservableOnSubscribe<ResponseBody>() {
                    @Override
                    public void subscribe(ObservableEmitter<ResponseBody> e) throws Exception {
                        e.onNext(ResponseBody.create(MediaType.parse("text/xml"), "链接网络失败"));
                    }
                });
            }
 
        }, new Callable<ObservableSource<? extends ResponseBody>>() {
            @Override
            public ObservableSource<? extends ResponseBody> call() throws Exception {
                Toast.makeText(mContext, "链接网络失败", Toast.LENGTH_LONG).show();
                return new ObservableSource<ResponseBody>() {
                    @Override
                    public void subscribe(Observer<? super ResponseBody> observer) {
                        observer.onComplete();
                    }
                };
            }
        }).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new Consumer<ResponseBody>() {
            @Override
            public void accept(ResponseBody responseBody) throws Exception {
                Log.d("Text", responseBody.string());
            }
        });
    }

我在代码标注的核心的地方的作用就是第一个网络访问异常的处理,只有重新创建一个被观察者,才能继续执行后面的subscribe()方法,如果我们不做任何处理的话,后面的所有逻辑就无法执行,程序当然挂掉拉!

相关文章

  • 埋坑第一铲之rxjava嵌套访问

    在学习rxjava的过程中,有遇到过关于rxjava嵌套请求的例子,但是都是理想的状态的,每个请求都是顺利完成请求...

  • 心坑【原创诗第31首】

    心坑 【原创诗第31首】 文\恋风 我的心 曾经有个坑 希望你一铲一铲 用慰语抚平 当我的心坑逐渐被岁月的风沙 一...

  • UITableView嵌套WKWebView的那些坑

    UITableView嵌套WKWebView的那些坑 UITableView嵌套WKWebView的那些坑

  • 利用RxJava替换嵌套接口回调

    RxJava替换嵌套接口回调 有时项目中需要进行两次或者三次以上的接口访问,这时如果使用同步方式走接口就需要实现嵌...

  • RxJava学习,封装一个简单的map 和flatMap

    RxJava 笔记 注意:这只是学习的过程,为了学习rxjava是怎么由callback嵌套转换而来,其中的map...

  • 2018-03-14.0.springboot初探

    埋坑

  • 院子

    好想有个院子 一个不大的院子 可以种菜 可以种花 可以有个坑 最好填满沙子 你一铲我一铲 填满自己的小桶 我便安静...

  • 埋坑。

    埋下一个巨坑—————— 建立一个属于自己多幻想世界,缤纷多彩,悲喜交加,流...

  • 坑埋

    栽到这个坑里之后, 像被摁死在这里了。 怎样都觉得很痛苦, 只要活着就会痛苦。 无论时间多久, 无论走到哪里, 都...

  • 未成年前,我们的命运到底谁来掌控?

    今天发高烧全身酸疼,眼睛也疼得眼泪一直流,但无论如何也得把自己挖的坑一铲一铲的填满。拿起手机完成今天的任务,坚持...

网友评论

      本文标题:埋坑第一铲之rxjava嵌套访问

      本文链接:https://www.haomeiwen.com/subject/mxdewttx.html