2017-09-11 11 views
1

DB内のオブジェクトがトランザクション内にあるかどうかをチェックして、DB全体を削除できるかどうかを確認しようとしています。しかし、この声明は常にreturns falseです。 Realm.getDefaultInstances().isClose()私は間違っています。誰かが私を説明してください。androidのrealmオブジェクトを閉じるには

if(!Realm.getDefaultInstances().isInTransaction()){ 

    Realm.getDefaultInstances().close(); 
    if(Realm.getDefaultInstances().isClosed()){ 
     Realm.getDefaultInstance().executeTransaction(new Realm.Transaction(){ 
        @Override 
        public void execute(Realm realm) { 
         realm.deleteAll(); 

         realm.close(); 

        } 
       }); 

      } 
    } 
+0

メソッド名を確認してもわかりませんか? Realm.getDefaultInstances()。isClose()またはRealm.getDefaultInstance()。isClosed() – Raghavendra

+0

@Raghavendra、通知してくれてありがとう&私はコードを更新しました。 – Dedeepthika

+0

'Realm.getDefaultInstances()' – EpicPandaForce

答えて

2

レルムインスタンスは各メソッドはあなたにも.close() 4回呼び出す必要があることを意味し、あなたの例では、少なくとも4にその数を増加させる前に、そうRealm.getDefaultInstance()を呼び出し、参照カウントされています。

トランザクションラムダ内でclose()を呼び出すと、トランザクションがコミットされないことに注意してください。近くは外に出なければならない。

https://realm.io/docs/java/latest/#closing-realms

https://realm.io/docs/java/latest/#realm-instance-lifecycle

+0

Realm.getDefaultInstance()でRealmインスタンスを開いても、どこにも閉じないということはありませんか? – Dedeepthika

+0

@Dedeepthika closeトランザクション完了後 – phpdroid

0
try(Realm r = Realm.getDefaultInstance()) { 
    r.executeTransaction((realm) -> { 
     realm.deleteAll(); 
    }); 
} // <-- auto-close 

しかし、あなたは、各getInstance()呼び出しに対してclose()を呼び出す必要があります:

私は非常レルムのライフサイクルを制御については、これらの二つのセクションを読むことをお勧めします。

関連する問題