我的UI无法更新数据更改

时间:2017-11-02 22:57:27

标签: java android rx-java

我使用本地数据库(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>>的任何元素进行了更改,我都不会看到对用户界面所做的任何更改。我可以错过什么?

2 个答案:

答案 0 :(得分:1)

将新适配器附加到ListView / RecyclerView或更新现有适配器中的数据并调用notifyDataSetChanged()

答案 1 :(得分:1)

尝试添加.subscribeOn(Schedulers.io())&amp;您的信息流.observeOn(AndroidSchedulers.mainThread())。 如果您想定期更新UI,我认为您需要实现这一点。