【问题标题】:Realm with RxAndroid not picking up latest data changes带有 RxAndroid 的领域没有获取最新的数据更改
【发布时间】:2016-01-28 09:35:49
【问题描述】:

我正在使用 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)

这个方法“save”基本上是把一个新创建的模型添加到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 表达式,所以这似乎不是问题,现在我回到第一方;(

【问题讨论】:

    标签: android rx-java rx-android realm


    【解决方案1】:

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

    Op here 有类似的问题。答案说明了情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多