我想在后台调用getNote
。
在我得到result之后,它是一个Note
对象,仍然在后台,我想要获取两个Note's
值-- text_encrypted
和date
。
毕竟,我想将它们返回到下一步,并在主线程中设置两个textViews的值。
我怎么才能做到这一点呢?下面是我的代码。
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中做错了什么,但我不确定。
发布于 2018-06-05 06:46:32
这不应该被编译,因为flatMap()
要求你从你的lambda返回一个观察值。此外,observeOn()
将为链的所有后续操作更改线程。
取而代之的是,你必须在你的操作之后调用observeOn()
,并且只map()
这些值。为了使它更好,您还可以使用Pair
而不是Object[]
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());
});
https://stackoverflow.com/questions/50689698
复制相似问题