0

所以我有Room数据库,我MutableLiveData用来在一个屏幕中从数据库加载four列表这四个列表中的每一个都有单独callbacks 的,在加载数据时调用,我有progress bar我在数据开始加载时显示的,我想progress bar在所有四个列表时隐藏它列表已加载,但问题是回调可能会因为各种延迟而随机触发,所以我有什么选择来确定何时加载所有列表?

4

1 回答 1

1

Room 支持 RxJava。您可以返回 RxJava 流并将您的流与丰富的 RxJava 运算符组合。检查RxJava Wiki中可用的列表。

这是未经测试的示例,可让您了解正在谈论的内容

@Dao
public interface TodoDao {
    @Query("SELECT * FROM TodoList")
    public Observable<List<ToDoEntity>> getAllTodos();
}


@Dao
public interface AnotherListDao {
    @Query("SELECT * FROM AnotherList")
    public Observable<List<ToDoEntity>> getAllOtherList();
}


MyDatabase db = ...//get database instance here

//most of the times d is member class that is disposed before object of that class goes out of scope
Disposable d = Observable.merge(db.getAllTodos(), db.getAllOtherList())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnSubscribe(subscription -> {
                    subscription.request(Long.MAX_VALUE);

                    //data is loading
                })
                .subscribe(data -> {
                            //onNext
                            //work with data here
                        },
                        error -> {
                            //onError
                            //an erro happened here, service it
                        },
                        () -> {
                            //onComplete
                            //task is done
                        }
                );

//to avoid leaking the Observable dispose it in relevant lifecycle
if(d && d.isDisposable())
    d.dispose())

让我知道是否有任何不清楚的地方。

于 2018-06-15T08:30:15.600 回答