Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android Room持久性库@Update无效大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过新的 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;
}
@H_862_4@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();

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

解决方法

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

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

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。