首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RxJava -在后台顺序调用两个方法,并在主线程中返回值

RxJava -在后台顺序调用两个方法,并在主线程中返回值
EN

Stack Overflow用户
提问于 2018-06-05 06:37:32
回答 1查看 141关注 0票数 0

我想在后台调用getNote

在我得到result之后,它是一个Note对象,仍然在后台,我想要获取两个Note's值-- text_encrypteddate

毕竟,我想将它们返回到下一步,并在主线程中设置两个textViews的值。

我怎么才能做到这一点呢?下面是我的代码。

代码语言:javascript
复制
Observable.fromCallable(() -> NotesDataBase.getNote(id))
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .flatMap(notes -> {
        new Object[]{
                GeneratorAES.decrypt(notes.text_encrypted),
                CalendarUtils.showArticleTime(notes.date)
        };
    })
    .subscribe(objects -> {
        ((TextView) findViewById(R.id.text2)).setText(objects[0]);
        ((TextView) findViewById(R.id.text1)).setText(objects[1]);
    });

我假设我在first flatMap中做错了什么,但我不确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 06:46:32

这不应该被编译,因为flatMap()要求你从你的lambda返回一个观察值。此外,observeOn()将为链的所有后续操作更改线程。

取而代之的是,你必须在你的操作之后调用observeOn(),并且只map()这些值。为了使它更好,您还可以使用Pair而不是Object[]

代码语言:javascript
复制
Observable.fromCallable(() -> NotesDataBase.getNote(id))
    .subscribeOn(Schedulers.io())
    .map(notes -> Pair.create(
                GeneratorAES.decrypt(notes.text_encrypted),
                CalendarUtils.showArticleTime(notes.date)))
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(pair -> {
        ((TextView) findViewById(R.id.text2)).setText(pair.first());
        ((TextView) findViewById(R.id.text1)).setText(pair.second());
    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50689698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档