如何使用 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())
        });