为了账号安全,请及时绑定邮箱和手机立即绑定

房间数据库 RxJava 后台线程

房间数据库 RxJava 后台线程

撒科打诨 2023-04-26 17:19:58
我正在尝试使用 RxJava 在后台线程上使用我的 RoomDatabase。我的 DAO 类:import android.arch.persistence.room.Dao;import android.arch.persistence.room.Insert;import java.util.List;@Daopublic interface MeasurementDAO{    @Insert    public void insertMeasurements(Measurements m);}我的实体类(为简洁起见省略了 getter 和 setter 方法):import android.arch.persistence.room.Entity;import android.arch.persistence.room.PrimaryKey;import android.support.annotation.NonNull;@Entitypublic class Measurements{    @NonNull    @PrimaryKey    public String mId;    public String finalResultIn;    public String finalResultFt;    public String lengthFt;    public String widthFt;    public String heightFt;    public String lengthIn;    public String widthIn;    public String heightIn;    public Measurements(String finalResultFt, String finalResultIn, String lengthFt, String widthFt, String heightFt,                        String lengthIn, String widthIn, String heightIn)    {        this.finalResultFt = finalResultFt;        this.finalResultIn = finalResultIn;        this.lengthFt = lengthFt;        this.widthFt = widthFt;        this.heightFt = heightFt;        this.lengthIn = lengthIn;        this.widthIn = widthIn;        this.heightIn = heightIn;    }    }最后,这是我的 MeasurementDatabase 类:@Database(entities = {Measurements.class}, version = 1)public abstract class MeasurementDatabase extends RoomDatabase{    private static final String DB_NAME = "measurement_db";    private static MeasurementDatabase instance;    public static synchronized  MeasurementDatabase getInstance(Context context)    {        if(instance == null)        {            instance = Room.databaseBuilder(context.getApplicationContext(), MeasurementDatabase.class,                    DB_NAME)                    .fallbackToDestructiveMigration()                    .build();        }        return instance;    }    public abstract MeasurementDAO measurementDAO();}
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

创建一个 Observable 并在其中编写您的逻辑。您可以订阅可观察对象并获取布尔值。


 public Observable<Boolean> insertObject(Measurements m) {

    return Observable.create(new ObservableOnSubscribe<Boolean>() {

        @Override

        public void subscribe(ObservableEmitter<Boolean> e) {

            appDb.measurementDAO().insertMeasurements(m);

            e.onNext(true);

            e.onComplete();

        }

    }).subscribeOn(Schedulers.io());            


}


查看完整回答
反对 回复 2023-04-26
?
莫回无

TA贡献1865条经验 获得超7个赞

我知道你有答案,但你永远不知道这是否失败。我确定您的 dao 插入方法可以返回一个long[](插入行的 ID)。


你可以轻松地做到:


Completable.fromCallable(() ->

            appDb.measurementDAO().insertMeasurements(m).length != 0 ?

                    Completable.complete() :

                    Completable.error(new IllegalStateException("Error inserting " + m.toString())))

            .subscribeOn(Schedulers.io())

            .subscribe(() -> { }, Throwable::printStackTrace);


查看完整回答
反对 回复 2023-04-26
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

我找到了我丢失的部分:

Completable.fromAction(() -> appDb.measurementDAO().insertMeasurements(m))
                        .subscribeOn(Schedulers.io())
                        .subscribe();


查看完整回答
反对 回复 2023-04-26
  • 3 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信