RxAndroid的领域没有获取最新的数据变化

时间:2016-01-28 09:35:49

标签: android rx-java rx-android realm

我正在使用Realm和RxAndroid。我有这个奇怪的问题,其中领域没有采取对DB进行的最新修改。

我正在使用两种方法。

Observable<Integer> save(Bitmap bitmap).
Observable<Integer> getImageList(Context applicationContext).

喜欢这个

   Activity 1
   getImageList(applicationContext)
   button click -> Activity 2
                      save(bitmap)
                      finish()  

   getImageList(applicationContext)

这种方法&#34;保存&#34;基本上将新创建的模型添加到RealmList中。

private Observable<Integer> save(Bitmap bitmap) {
return Observable.create((Observable.OnSubscribe<Integer>) subscriber -> {
    --------------------------------------
    -----Various file creation stuff------
    --------------------------------------

     UserImagesModel model = realm
                    .where(UserImagesModel.class)
                    .findFirst();


    //ImageModel class extends RealmObject 
    ImageModel imageModel = new ImageModel();

    realm.beginTransaction();
    //realm object must be Edited inside transaction
    model.getResponse().add(0, imageModel);
    realm.commitTransaction();

    realm.close();
    subscriber.onNext(1);
    subscriber.onCompleted();
 }
}

Ans此方法获取已保存的列表。

public Observable<Integer> getImageList(Context applicationContext) {
    return Observable.create((Observable.OnSubscribe<Integer>) subscriber -> {
        AppUtils.logD("User image observable instance " + this);
        UserImagesModel model;
        Realm realm = Realm.getInstance(applicationContext);
        model = realm.where(UserImagesModel.class).findFirst();
          ^
  This model doesn't replicate data added in save call

        ------------------------------------------------
        ----Various validation and service calls.-------
        ------------------------------------------------

        subscriber.onCompleted();
        realm.close();
    });
 }
}

正如我在代码中提到的,我从Realm获得的UserImageModel并没有复制我在save方法中所做的更改。

当我第二次调用getImageList方法 时会出现问题。当我在Observable.create中打印this.toString时,它会打印出第一次返回的相同对象。

所以我相信这个问题似乎与我使用RxAndroid的方式有关。谁能告诉我我失踪了什么?我该如何解决?

更新:

经过几次测试后,我意识到Observable.create里面的this.toString实际上指的是父对象,因为我已经使用了lamda表达式,所以这似乎不是问题,现在我回到原点;(

1 个答案:

答案 0 :(得分:1)

事实证明,这是Realm的预期行为。因为我在那些没有Looper的IO线程上订阅了这些可观察数据。

Op here也存在类似问题。答案解释了这个案例。