Android Room持久性库@Update无效

Android Room持久性库@Update无效,第1张

概述我试图通过新的 android房间库更新我的数据库,但它无法正常工作.这是我的方法 @IgnoreExtraProperties@Entity(tableName = CarModel.TABLE_NAME, indices = {@Index(value = "car_name", unique = true)})public class CarModel { public 我试图通过新的 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);@UpdatevoID updateCars(List<CarModel> param);@query("SELECT count(*) FROM " + CarModel.table_name)liveData<Integer> isDbEmpty();

我做了调试,新数据来了,并调用viewmodel.updateItems(List)方法.提前谢谢!

解决方法 我很抱歉发布这个作为答案,但我不允许添加一个简单的评论,所以这是我的想法:

您是否尝试过仅使用insertCars()而不是updateCars()?无论如何,看起来你的isCarsEmpty()liveData回调一直被触发,因为当调用观察者时,数据库再次被改变.我不太确定你想要实现什么.

总结

以上是内存溢出为你收集整理的Android Room持久性库@Update无效全部内容,希望文章能够帮你解决Android Room持久性库@Update无效所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1134694.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存