【发布时间】: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