1

Room通过返回从数据库获取用户Single<UserMinimal>。一旦我得到想要通过LiveData观察显示的数据,并且我正在使用LiveDataReactiveStreams.fromPublisher()方法,但看起来像何时.setValue()被调用,接收到的用户的所有属性都是空的。不知道是需要.subscribe()还是什么。

LiveData<UserMinimal> userLiveData = LiveDataReactiveStreams
                .fromPublisher(mRepository.getUser().toFlowable());
        user = new MediatorLiveData<>();
        user.addSource(userLiveData, minimalUser -> {
            user.postValue(minimalUser);
            user.removeSource(userLiveData);
        });


public Single<MenuRepository.UserMinimal> getUser(){
    return dataSource.getUser()
            .onErrorReturnItem(new MenuRepository.UserMinimal())
            .doOnError(t -> Timber.e(t))
            .subscribeOn(Schedulers.io());
}

看起来对数据库的访问是成功的,因为如果我使用 MutableLiveData 而不是 MeadiatorLiveData,它确实有效:

user = new MutableLiveData<>();
        disposable.add(mRepository.getUser().subscribe(new Consumer<UserMinimal>() {
            @Override
            public void accept(UserMinimal userMinimal) throws Throwable {
                user.postValue(userMinimal);
            }
        }));
4

0 回答 0