我试图通过新的
android房间库更新我的数据库,但它无法正常工作.这是我的方法
@IgnoreExtraProperties @Entity(tableName = CarModel.TABLE_NAME,indices = {@Index(value = "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; }
MainActivity.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); } } });
Carviewmodel.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> { private AppDatabase db; public updateCarsTask(AppDatabase appDatabase) { db = appDatabase; } @Override protected Void doInBackground(List<CarModel>... params) { db.carDao().updateCars(params[0]); return null; } }
CarDao.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();