如何使用 Rx Java 在链请求上更新 UI
How to update UI on chain request with Rx Java
我想根据链请求更新 UI 2 次。
请求 getUserByID()
完成后首次更新 UI。第二个 getParentName()
完成但是当我尝试根据第一个请求更新 UI 并得到线程问题的错误原因时。
我不知道如何解决这个问题。
示例代码
API.getUserByID("USER ID")
.flatMap(user-> {
// How to update UI here?
return API.getParentName(user.getId()))
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(parent-> {
// It's ok to update UI cause of on main thread.
parentTextView.setText(parent.getName())
});
谢谢。
您想要更新 UI 可观察发射,因此您需要为该可观察对象指定观察者线程。
然后你应该使用 doOnNext
运算符,它在观察者线程上调用:
API.getUserByID("USER ID")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(user_ -> {calls on observer thread})
.flatMap(user-> {
return API.getParentName(user.getId()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
})
.subscribe(parent-> {
// It's ok to update UI cause of on main thread.
parentTextView.setText(parent.getName())
});
我想根据链请求更新 UI 2 次。
请求 getUserByID()
完成后首次更新 UI。第二个 getParentName()
完成但是当我尝试根据第一个请求更新 UI 并得到线程问题的错误原因时。
我不知道如何解决这个问题。
示例代码
API.getUserByID("USER ID")
.flatMap(user-> {
// How to update UI here?
return API.getParentName(user.getId()))
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(parent-> {
// It's ok to update UI cause of on main thread.
parentTextView.setText(parent.getName())
});
谢谢。
您想要更新 UI 可观察发射,因此您需要为该可观察对象指定观察者线程。
然后你应该使用 doOnNext
运算符,它在观察者线程上调用:
API.getUserByID("USER ID")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(user_ -> {calls on observer thread})
.flatMap(user-> {
return API.getParentName(user.getId()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
})
.subscribe(parent-> {
// It's ok to update UI cause of on main thread.
parentTextView.setText(parent.getName())
});