2016-05-05 13 views
0

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

これは間違いなく、イテレータをサポートするために0.89.0の変更の副作用のように思えます。 – EpicPandaForce

+0

おそらく、私は0.90.0を使用しています –

答えて

0

クエリ結果の一部であるアイテムを間接的に削除しているようですが、これは0.89の変更の変更の一部です。代わりに、クエリ結果から直接削除する必要があります。

public boolean evictById(UserRealmModel obj) { 
    obj.deleteFromRealm() 
    return true; 
} 

// should be 

public boolean evictById(RealmResults list, int index) { 
    list.deleteFromRealm(index); 
    return true; 
} 

あなたはよりも、うまくいけばあなたのアイデアを得るんevictByIdは、私はあなたの方法を推測しているの実装を提供していませんでした。

また、の後にを実行したクエリでは、削除されたオブジェクトが含まれていないオブジェクトもあります。

+0

私はあなたが解決策は動作すると思うが、事は私がクリーンなアーキテクチャを使用していると私はプレゼンテーション層でそれらを受け取る前に結果にいくつかのマッピングを行うことです。だから、私はRealmResultsリストにアクセスできません。 また、私はevictById()の実装を追加しました –

+0

あなたの 'evictById'はプレゼンテーションレイヤーメソッドではありません。これはデータ層に属し、リストにアクセスすることができます。 –

関連する問題