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