Я пытался использовать RxJava с комнатой. Логика проста: если для текущей даты нет строки, я создам экземпляр и вставлю строку в базу данных. Проблема в том, что строка вставляется, но она действует как цикл. Когда я отлаживаю, код переходит к запуску insertTestType, завершается, а затем переходит к части подписчика getTestModel, затем счетчик равен 1, а затем останавливается.
private void getTestModel() {
String date = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());
mCompositeDisposable.add(questionDatabase.questionDao().getTestByDate(date, testType)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(testModels -> {
if (testModels.size() > 0) {
testModel = testModels.get(0);
} else {
testModel = new TestModel(testType, date);
insertTestType();
}
}, throwable -> Log.e("ErrorRx", "exception getModels")));
}
private void insertTestType() {
Completable.fromAction(() -> questionDatabase.questionDao().insert(testModel))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableCompletableObserver() {
@Override
public void onComplete() {
Log.d(TAG, "onComplete");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError");
}
});
}
База данных,
@Insert
void insert(TestModel testModel);
@Query("SELECT * FROM " + TestModel.TABLE_NAME+ " WHERE " + TestModel.DATE + " = :date" + " AND testType " + "=:testType")
Flowable<List<TestModel>> getTestByDate(String date, TestType testType);
почему он возвращается к предыдущему подписчику? Заранее спасибо.