【问题标题】:Looping around while using RxJava with Room循环使用 RxJava 和 Room
【发布时间】:2018-04-30 13:41:56
【问题描述】:

我一直在尝试将 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);

为什么它会回到以前的订阅者?提前致谢。

【问题讨论】:

  • 那么第二次getTestModel 中的订阅者部分,testModels.size()返回0,对吧?
  • 真的很抱歉,我的查询有问题。我已经编辑了我的问题。它没有循环,但它再次返回给订阅者。

标签: android rx-java rx-android android-room


【解决方案1】:

代码运行正常 :)
当您使用 Flowable 时,每次更新数据时,Flowable 对象都会自动发出,通知它的所有订阅者,这就是它在您的第一个方法中从 subscribe 调用代码的原因。
如果您不希望这种行为考虑使用Maybe - 更多信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    相关资源
    最近更新 更多