Android Room持久性库@Update无效

【Android Room持久性库@Update无效】须知少年凌云志,曾许人间第一流。这篇文章主要讲述Android Room持久性库@Update无效相关的知识,希望能为你提供帮助。
我试图通过新的android房间库更新我的数据库,但它无法正常工作。这是我的方法

@IgnoreExtraProperties @Entity(tableName = CarModel.TABLE_NAME, indices = {@Index(value = "https://www.songbingjia.com/android/car_name", unique = true)}) public class CarModel {public static final String TABLE_NAME = "cars"; @PrimaryKey(autoGenerate = true) private int id; @ColumnInfo(name = "car_name") private String name; @ColumnInfo(name = "car_price") private String price; private String type; private String position; }

main activity.java
viewModel.isCarsEmpty().observe(MainActivity.this, new Observer< Integer> () { @Override public void onChanged(@Nullable Integer rowCount) { if (rowCount == 0) { viewModel.insertItems(list); } else { viewModel.updateItems(list); } } });

car view model.Java
public LiveData< Integer> isCarsEmpty() { return appDatabase.carDao().isDbEmpty(); } public void insertItems(List< CarModel> carModels) { new insertCarsAsyncTask(appDatabase).execute(carModels); }private class insertCarsAsyncTask extends AsyncTask< List< CarModel> , Void, Void> { private AppDatabase db; public insertCarsAsyncTask(AppDatabase appDatabase) { db = appDatabase; }@Override protected Void doInBackground(List< CarModel> ... params) { db.carDao().insertCars(params[0]); return null; } }public void updateItems(List< CarModel> list) { new updateCarsTask(appDatabase).execute(list); }private class updateCarsTask extends AsyncTask< List< CarModel> , Void, Void> { private AppDatabase db; public updateCarsTask(AppDatabase appDatabase) { db = appDatabase; }@Override protected Void doInBackground(List< CarModel> ... params) { db.carDao().updateCars(params[0]); return null; } }

card奥.Java
@Insert(onConflict = REPLACE) void insertCars(List< CarModel> cars); @Update void updateCars(List< CarModel> param); @Query("SELECT count(*) FROM " + CarModel.TABLE_NAME) LiveData< Integer> isDbEmpty();

我做了调试,新数据来了,并调用viewModel.updateItems(list)方法。提前谢谢!
答案我很抱歉发布这个作为答案,但我不允许添加一个简单的评论,所以这是我的想法:
您是否尝试仅使用insertCars()而不是updateCars()?无论如何,看起来你的isCarsEmpty() LiveData回调一直被触发,因为当观察者被调用时,数据库再次被改变..我不太确定你想要实现什么。
另一答案确保要更新的行和要发送到更新的模型应具有您已定义为主键的相同ID。

    推荐阅读