2017-07-19 15 views
0

私はRealmObjectを削除して(そしてStethoRealmを使用して削除したことを確認して)問題に遭遇しますが、同じRealmObjectを作成して同じ変数値で保存すると、新しいRealmObjectと一緒に再表示されます。私は「ID」を照合することによってmyObject1を削除し、私は同じ「名前」に新しいMyObjectにmyObject2を作成するときに、両方のオブジェクトがAndroid Realm - 削除後に返されるRealmObject

任意のヒントこれはかもしれない理由について、私の領域に表示されます - 以下のオブジェクトと

起こっている?

例:

public class MyObject extends RealmObject { 

@PrimaryKey 
private String id; 

private String name; 

// getters and setters 

} 

編集

削除コール

@Override 
public void deleteMyObjectById(final String id, final OnDeleteMyObjectById callback) { 
    Realm realm = new MyRealmConfiguration().getDefaultRealm(); 

    final RealmResults<MyObject> myObjects = realm.where(MyObject.class).equalTo(RealmTable.MyObject.ID, id).findAll(); 

    realm.executeTransaction(new Realm.Transaction() { 
     @Override 
     public void execute(Realm realm) { 
      myObjects.deleteAllFromRealm(); 

      if (callback != null) { 
       callback.onSuccess(); 
      } 
     } 
    }); 
    realm.close(); 
} 

私はあなたがオブジェクトを削除する方法としてはよく分からないコール

@Override 
public void addMyObject(MyObject myObject, OnSaveMyObjectCallback callback) { 
    Realm realm = new MyRealmConfiguration().getDefaultRealm(); 
    realm.executeTransaction(new Realm.Transaction() { 
     @Override 
     public void execute(Realm realm) { 
      realm.copyToRealmOrUpdate(myObject); 

      if (callback != null) { 
       callback.onSuccess(); 
      } 

     } 
    }); 
    realm.close(); 
} 
+0

削除処理で正常に動作します既存のレルムインスタンスを作成するには、まだ古いDBへの参照ですが、削除されたオブジェクトはまだ表示されます –

+0

上記のコードではこの問題を調査するには十分ではありません。オブジェクトの削除と作成を含むコードを追加できますか? – Dalinaum

+0

'ここで私はRealmObjectを削除して(そしてStethoRealmを使って消滅したことを確認しますが)、同じ変数値で新しいRealmObjectを作成して保存すると、削除されたRealmObjectが新しいRealmObjectとともに表示されます。質問! – EpicPandaForce

答えて

1

を追加します。私はそれらを削除しています(とそれが動作する)方法がある。もちろん、...

final RealmResults<UserCredentials> credentialResults = realm.where(UserCredentials.class).findAll(); 

realm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 
     credentialResults.deleteAllFromRealm(); 
    } 
}); 

realm.close(); 

、あなたはMyObjectに代わりのUserCredentialsを使用している、とあなたはそのタイプのすべてを削除していないが、それは類似していなければなりません十分な。あなたがまだいない場合はexecuteTransactionrealm.close()をお試しください。

+0

RealmResultsを取得する前に、自分のレルムインスタンスを取得していることを除いて、まさに私が行っているように、 Realm realm = new MyRealmConfiguration()。getDefaultRealm(); – Naz

+0

あなた自身の設定を使用していますが、デフォルトのレルムインスタンス?カスタムRealm設定を使用している場合は、Realmを別々にインスタンス化する必要があります – darkterbears

+0

My MyRealmConfigurationがgetDefaultRealmを上書きして私のカスタム設定を返す – Naz

1

このようなものを試してみてください。インスタンスを変換メソッド内で取得し、削除します。私は私のアプリの1つのためにこれを使用しています。そしてそれは、私はあなたが新しいオブジェクトを削除し、作成するために実を使用する方法を知らないが、あなたが使用する場合は、作成するためのレルムの新しいインスタンスを取得し、その後削除し、レルムのインスタンスを使用する必要があります

Realm realm = Realm.getDefaultInstance(); 
     realm.executeTransaction(new Realm.Transaction() { 
      @Override 
      public void execute(Realm realm) { 
       RealmResults<MyObject> myObjects = realm.where(MyObject.class).equalTo(RealmTable.MyObject.ID, id).findAll(); 
       myObjects.deleteAllFromRealm(); 
      } 
     }); 
関連する問題