【发布时间】:2017-11-23 14:33:39
【问题描述】:
在我的Fragment 的onCreateView 中,我尝试从数据库中获取数据。我用的是安卓房间。
如果我得到 null 或 0 行 - 我会显示“更新”按钮。用户按下此按钮并从服务器获取数据,并插入数据库。之后我想刷新RecyclerView 并再次从数据库加载数据。
我尝试在onCreateView中加载数据:
MyApplication.me().getDatabase().categoryDao().getAll()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(categories -> {
if (categories == null || categories.isEmpty()) {
price.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.INVISIBLE);
Toast.makeText(getActivity(), "Update", Toast.LENGTH_SHORT).show();
} else {
CategoryAdapter categoryAdapter = new CategoryAdapter(categories);
categoryAdapter.setOnItemClickListener(new ClickHandler());
recyclerView.setAdapter(categoryAdapter);
}
});
如果数据库有数据 - 一切都好。如果找不到数据,我会显示 Button 并在按下后发出休息请求并在此代码中得到结果
@Override
public void onNext(ProductsResponse value) {
ProductService.me().saveProducts(value.getProductItems());
}
方法 saveProducts 将数据保存在数据库中,然后我需要刷新适配器!!!但是!!!
public void saveProducts(List<ProductItem> products) {
new Thread(() -> {
List<Product> productList = new ArrayList<>();
for (ProductItem item : products) {
............
productList.add(product);
}
MyApplication.me().getDatabase().productDao().insertAll(productList);
}).start();
}
这个方法在新线程中。我试过这个:
@Query("SELECT * FROM categories")
Flowable<List<Category>> getAll();
在每次插入触发此代码后
.subscribe(categories -> {
if (categories == null || categories.isEmpty()) {
price.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.INVISIBLE);
Toast.makeText(getActivity(), "Update", Toast.LENGTH_SHORT).show();
} else {
CategoryAdapter categoryAdapter = new CategoryAdapter(categories);
categoryAdapter.setOnItemClickListener(new ClickHandler());
recyclerView.setAdapter(categoryAdapter);
}
});
但是适配器没有刷新
【问题讨论】:
标签: android rx-java android-room