rx-javaを使用してレルム・データベースからデータ・セットを取得するリサイクラ・ビューを実装しました。データセットからアイテムを削除すると、すべてのアイテムが取得されます。残ったアイテムと、削除したアイテムが表示されますが、無効化されます。Get All In Realm削除されたアイテムを返します
Observable.defer(list -> {
boolean isDeleted = true;
for (int i = 0; i < list.size(); i++)
isDeleted = isDeleted && evictById(list.get(i));
return Observable.just(isDeleted);
}).subscribe(new Subscriber{
@Override
public void onCompleted() { }
@Override
public void onError(Throwable e) { }
@Override
public void onNext(Boolean success) {
if (success)
getUserList();
}
});
boolean evictById(final int itemId){
mRealm = Realm.getDefaultInstance();
RealmModel toDelete = mRealm.where(UserRealmModel.class).equalTo("userId", itemId).findFirst();
if (toDelete != null) {
mRealm.beginTransaction();
RealmObject.deleteFromRealm(toDelete);
mRealm.commitTransaction();
return !RealmObject.isValid(toDelete);
} else return false;
}
public void getUserList(){
Observable.from(Realm.getDefaultInstance().where(UserRealmModel.class).findAll())
.subscribe(new Subscriber<List<UserRealmModel>> {
@Override
public void onCompleted() {
hideViewLoading();
}
@Override
public void onError(Throwable e) {}
@Override
public void onNext(List<UserViewModel> users) {
showUsersCollectionInView(users);
});
}
たとえば、データセットには10個のアイテムがあり、そのうち3個を削除します。 getUserListレスポンスには、有効な項目が7つ、無効な項目が3つある10個の項目のリストが表示されます。 また、私は、領域ブラウザを使用して、アイテムが削除されたことを確認しました! 誰かがなぜこれが起こっているのか説明してもらえますか?
これは間違いなく、イテレータをサポートするために0.89.0の変更の副作用のように思えます。 – EpicPandaForce
おそらく、私は0.90.0を使用しています –