插入数据后,会议室数据库表仍为空

时间:2018-08-07 12:28:22

标签: android android-room

我刚刚完成了有关Room Database的代码实验室课程,但似乎无法将数据加载到表中。

我已将课程应用于我的项目。我的项目在recyclerview中显示了一堆项目,当用户按下recyclerview中的一个项目按钮时,该项目将被添加到Room数据库中创建的表中。

我已经使用sqlite db资源管理器打开了Room数据库,其中包含设备资源管理器中的文件。我可以看到数据库以及要插入的表均已创建,但是表中没有数据。

这是来自onBindViewHolder,用于我的recyclerview

holder.QtyAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //Code to build product
                new PopulateDB(RoomDatabase.getDatabase(context), product);
            }
        });

我已经检查并确保产品不为空。

这是用于填充数据库的AsyncTask,也位于adpater中

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;
        }
    }

这是我的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();
}

我正试图在购物车片段中显示此表数据,并且我正在使用此方法在数据准备好后显示它。

cartViewModel.getAllCartItems().observe(this, new Observer<List<Product>>() {
            @Override
            public void onChanged(@Nullable List<Product> products) {
                cartAdapter.setProductCartList(products);
            }
        });

我已经检查了此适配器,列表大小为0。

如果您需要更多信息,请务必询问, 谢谢您的时间/

1 个答案:

答案 0 :(得分:3)

new PopulateDB(RoomDatabase.getDatabase(context), product);

您正在创建AsyncTask。您永远不会执行它,因此您的doInBackground()未被运行。您可以通过在doInBackground()中放置断点或向doInBackground()添加日志记录来进行测试。

要解决此问题,请execute()您的AsyncTask

此外,请注意,由于您未使用onPostExecute(),因此与使用任何其他线程解决方案(AsyncTaskThread相比,此处使用Executor的价值很小。 ,RxJava等)。