亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

房間數據庫 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 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號