将 RxJava 与 Room 一起使用时循环
Looping around while using RxJava with Room
我一直在尝试将 RxJava 与 Room 结合使用。逻辑很简单,如果当前日期没有行,我将创建一个实例并将行插入到数据库中。问题是正在插入该行,但它的行为就像一个循环。当我调试时,代码转到 运行 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);
为什么它会回到以前的订阅者?提前致谢。
代码是 运行 应该是:)
当您使用 Flowable
时,每次更新数据时,Flowable
对象都会自动发出,通知它的所有订阅者,这就是为什么它会在您的第一个方法中调用 subscribe
中的代码。
如果您不希望出现这种行为,请考虑使用 Maybe
- 更多信息 here
我一直在尝试将 RxJava 与 Room 结合使用。逻辑很简单,如果当前日期没有行,我将创建一个实例并将行插入到数据库中。问题是正在插入该行,但它的行为就像一个循环。当我调试时,代码转到 运行 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);
为什么它会回到以前的订阅者?提前致谢。
代码是 运行 应该是:)
当您使用 Flowable
时,每次更新数据时,Flowable
对象都会自动发出,通知它的所有订阅者,这就是为什么它会在您的第一个方法中调用 subscribe
中的代码。
如果您不希望出现这种行为,请考虑使用 Maybe
- 更多信息 here