Dem*_*218 1 android android-room
我刚刚完成了 Room Database 的 codelab 课程,但似乎无法将数据加载到表中。
我已将课程应用到我的项目中。我的项目在 recyclerview 中显示了一堆项目,当用户在 recyclerview 中的一个项目上按下按钮时,它意味着被添加到在 Room 数据库中创建的表中。
我已经使用 sqlite db explorer 和设备资源管理器中的文件打开了 Room db。我可以看到已创建数据库以及我尝试插入的表,但表中没有数据。
这是来自 onBindViewHolder 用于我的回收视图
holder.QtyAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Code to build product
new PopulateDB(RoomDatabase.getDatabase(context), product);
}
});
Run Code Online (Sandbox Code Playgroud)
我已经检查并确保产品不为空。
这是用于填充数据库的 AsyncTask,也在适配器中
private static class PopulateDB extends AsyncTask<Void,Void,Void>{
private final CartDao cartDao;
private final Product product;
PopulateDB(RoomDatabase database, Product product){
cartDao = database.CartDao();
this.product = product;
}
@Override
protected Void doInBackground(Void... voids) {
cartDao.insert(product);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 DAO
@Dao
public interface CartDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(Product productCart);
@Query("DELETE FROM promotion_cart")
void clearCart();
@Query("SELECT * from promotion_cart")
LiveData<List<PromotionProduct>> getAllPromotionCartItems();
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在购物车片段中显示此表数据,并且我正在使用此方法在准备好后显示数据。
cartViewModel.getAllCartItems().observe(this, new Observer<List<Product>>() {
@Override
public void onChanged(@Nullable List<Product> products) {
cartAdapter.setProductCartList(products);
}
});
Run Code Online (Sandbox Code Playgroud)
我检查了这个适配器,列表大小为 0。
如果您需要更多信息,请询问,谢谢您的时间/
new PopulateDB(RoomDatabase.getDatabase(context), product);
Run Code Online (Sandbox Code Playgroud)
您正在创建一个AsyncTask. 你永远不会执行它,所以你doInBackground()没有被运行。你可以通过把一个断点在测试这个doInBackground()或添加日志记录doInBackground()。
要修复它,execute()您的AsyncTask.
另外,请注意,由于您没有使用onPostExecute(),因此AsyncTask与使用任何其他线程解决方案(Thread、Executor、 RxJava 等)相比,在此处使用几乎没有价值。
| 归档时间: |
|
| 查看次数: |
2502 次 |
| 最近记录: |