当前位置: 首页 > 知识库问答 >
问题:

RxJava-嵌套的可观察对象?(改造)

贾飞章
2023-03-14

我面临的问题是我需要一个身份验证令牌来创建我的Retrofit服务。我目前使用可观察来获取所述令牌,导致一个相当丑陋的可观察构造:

Observable<MyService> observable = application.getMyService();
    observable.observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(application.defaultSubscribeScheduler())
            .subscribe(new Subscriber<MyService>() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {
                    Log.e(TAG, "Error creating service: ", e);
                }

                @Override
                public void onNext(MyService myService) {
                    subscription = myService.searchStuff(searchFor)
                            .observeOn(AndroidSchedulers.mainThread())
                            .subscribeOn(application.defaultSubscribeScheduler())
                            .subscribe(new Subscriber<AResponseWrapper>() {
                                @Override
                                public void onCompleted() {

                                }

                                @Override
                                public void onError(Throwable error) {
                                    Log.e(TAG, "Error loading stuff: ", error);
                                }

                                @Override
                                public void onNext(AResponseWrapper wrapper) {
                                    MainPresenter.this.stuff = wrapper.getStuff();
                                }
                            });
                }
            });

我忍不住觉得这不是应该做的。我说得对吗?

共有1个答案

欧阳洲
2023-03-14

可观察到的<代码>。我一直在寻找平面图。它允许将结果映射到另一个可观察对象:

Observable<MyService> observable = application.getMyService();
    subscription = observable
            .observeOn(application.defaultSubscribeScheduler())
            .subscribeOn(application.defaultSubscribeScheduler())
            .flatMap(service -> service.searchStuff(searchFor))
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<AResponseWrapper>() {
                @Override
                public void onCompleted() {
                    if (series.size() < 1) {
                        mainView.showMessage(R.string.no_stuff_found);
                    } else {
                        mainView.showStuff(stuff);
                    }
                }

                @Override
                public void onError(Throwable error) {
                    Log.e(TAG, "Error loading stuff: ", error);
                }

                @Override
                public void onNext(AResponseWrapper wrapper) {
                    MainPresenter.this.stuff= wrapper.getStuff();
                }
            });

请注意,我首先在IO调度程序上观察,只有在flatMap之后,我才会在主线程上订阅。否则,服务。searchStuff调用(至少我认为是这一部分)将在主线程上执行,产生一个NetworkOnMainThreadException。

感谢@ahmed-ashraf-g为我指出了这个答案。

 类似资料:
  • 假设我有一个返回列表的博客帖子api 从列表创建可观察 将每个可观察拆分为

  • 我正在努力理解如何合并两个可观察对象并利用它们合并后的产品。我在mergeMap、switchMap、flatMap、大理石图等上看了无数视频,但我仍然不知道合并观测值是如何工作的。我觉得在使用RxJS的时候,我不会有效率,甚至不会正确。 我有一个要订阅的可观测值,我还想订阅代码中特定表单数组的valueChanges可观测值。但是,我需要确保只有在正确构建表单数组之后才能进行第二次订阅,否则将出

  • 我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从

  • 问题内容: 我使用侦听器作为回调来观察Android的异步操作,但是我认为用RxJava替换此侦听器可能很棒,我是使用此库的新手,但是我真的很喜欢它,并且我始终将其与Android项目一起使用。 这是我的重构代码: 一个简单的回调: 和“观察者”: 谢谢! 问题答案: 例如,您可以使用 Observable.fromCallable 来创建可观察数据。 然后使用您的数据 使用了rxjava 1.x

  • 在android 6.0.1 Samsung s6 Edge+上的测试 当device screen脱机并从debug中拔出时,可观察到的只是停止发射项目。如果设备打开,则开始发射对象。另一个问题是,在停止接收项目之前,我会按照相同项目的顺序随机地得到2/3个重复调用 ____________________________edit_________________________________

  • Observables 是多个值的惰性推送集合。它填补了下面表格中的空白: 单个值 多个值 拉取 Function Iterator 推送 Promise Observable 示例 - 当订阅下面代码中的 Observable 的时候会立即(同步地)推送值1、2、3,然后1秒后会推送值4,再然后是完成流: var observable = Rx.Observable.create(functio