我使用本地数据库(SugarORM),并且我在数据库发生变化时实施RXJava来更新UI。
当活动开始时,它订阅了一个新的观察者:
@Override //This is happening inside doInBackground !
public void onLoading() {
presenter.getRxProducts().subscribe(new Observer<List<Product>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Product> products) {
adapter = new SimpleProductAdapter(getApplicationContext(), R.layout.row_simple_product,
products);
}
});
}
@Override //This happens inside onPostExecute() !
public void onLoadingComplete() {
lvProducts.setAdapter(adapter);
super.onLoadingComplete();
}
在我的演示者类中,getRxProducts方法如下所示:
public Observable<List<Product>> getRxProducts(){
return Observable.fromCallable(new Callable<List<Product>>(){
@Override
public List<Product> call() throws Exception {
return getAllProducts(Product.Sorting.NONE); //This returns a List<Product> object.
}
});
}
数据在用户界面中看起来不错,但如果我对Observable<List<Product>>
的任何元素进行了更改,我都不会看到对用户界面所做的任何更改。我可以错过什么?
答案 0 :(得分:1)
将新适配器附加到ListView / RecyclerView或更新现有适配器中的数据并调用notifyDataSetChanged()
答案 1 :(得分:1)
尝试添加.subscribeOn(Schedulers.io())
&amp;您的信息流.observeOn(AndroidSchedulers.mainThread())
。
如果您想定期更新UI,我认为您需要实现这一点。