web-dev-qa-db-ja.com

ルーム-新しい値を挿入した後に削除が実行されます

私はRxjava2を研究しており、RoomライブラリをRxjava2と統合しようとしています。問題は、テーブルにデータが入力されていて、アプリにログインするたびに、このテーブルを削除してから、データベースに新しいコンテンツを挿入することです。別に、削除と挿入は正常に機能しますが、テーブルのコンテンツを削除した後で新しい値を挿入しようとすると、deleteメソッドはすべての新しい値を削除します。(コードの一部はkotlinにあり、その他はJavaにあります)
私はすでにこれを試しました: RxJava2 + Room:clearAllTables()呼び出しの後でDBにデータが挿入されていません ですが、成功しません。

DAO

@Dao
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(list:List<Something>)

@Query("DELETE FROM SomethingTable")
fun delete()

@Query("SELECT * FROM SomethingTable")
fun getAll(): Flowable<List<Something>>

DAOを呼び出す私のクラス(CallDao)

//insert
fun insertInDB(list: List<Something>) {
    Completable.fromAction {
        dbDAO!!.insert(list)
    }.observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe()
}

//delete
fun clean() {
    Completable.fromAction {
        dbDAO!!.delete()
    }.observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.single())
            .subscribe()
}

//search all
fun findAll(): Observable<List<Something>>? {
    return Observable.create { subscriber ->
        dbDAO!!.getAll()
                .subscribeOn(Schedulers.io())
                .subscribe {it->
                    subscriber.onNext(it)
                }
    }
}

ログインボタンをクリックしたときに呼び出されるメソッド

private void clearAndInsertInDB() {
CallDao callDao= new CallDao(getActivity());
//delete all table values
callDao.clean();

Something sm = new Something("test1", "test2");
ArrayList<Something> list = new ArrayList<>();
list.add(sm);
list.add(sm);
//insert new values
callDao.insertInDB(list);

//get all new values in DB
callDao.findAll()
      .observeOn(AndroidSchedulers.mainThread())
      .subscribe(res -> {
      //here gives me a IndexOutOfBoundsException
      Log.d("logDebug", res.get(0).getCodeExemple());
    });
}

私のコードの修正も歓迎です:)が、主な問題は、deleteメソッドがすべての新しい挿入値を削除し、古い値のみを削除することです。

7
barbs

ボタンを押した後、値が残っていますか?コメントはまだできませんので、ここでお願いします。

0
Dimness