2017-11-14 1 views
0

Ich habe die java.lang.IllegalStateException beim Versuch, die realm Datei zu löschen.So schließen Sie() alle Instanzen des Realms, bevor Sie die Datei löschen

java.lang.IllegalStateException: Es ist nicht erlaubt, die mit einem offenen Realm verbundene Datei zu löschen. Denken Sie daran, zu schließen(), um alle Instanzen des Realm vor der Datei zu löschen: /data/data/com.mypackage.name/files/filename.realm

habe beide executeTransactionAsync und executeTransaction Methode. Also, ich denke, dass es eine Instanz async gibt, die ich nicht schließen kann, bevor ich die ganze realm Datei lösche. Wie kann ich alle Instanzen von realm schließen oder löschen realm Datei ohne diese Ausnahme zu bekommen?

Antwort

1

Schwer zu beantworten ohne weitere Details, da offene Instanzen von vielen Orten kommen können. Vielleicht unter den beiden Links können einige Hinweise in geben, wie Sie mit den Realm Instanzen arbeiten:

Siehe https://realm.io/docs/java/latest/#closing-realms und https://realm.io/docs/java/latest/#realm-instance-lifecycle

+0

Vielen Dank für Ihre Antwort. Das gleiche mit dem, was ich dachte. Nur eine Frage, warum 'Realm' die Anzahl von Realm-Instanzen über 'getLocgealInstanceCount'- oder' getGlobalInstanceCount'-Instanzen erhalten kann, aber nicht die Liste der Instanzen bekommt? Oder keine native Funktion, die alle Realm-Instanzen stoppt und schließt. – NamNH

+0

Wir könnten eine "forceClose" -Methode machen, aber das würde höchstwahrscheinlich nur einen anderen Teil Ihrer App zum Absturz bringen, weshalb wir sie nicht hinzugefügt haben. –

+0

Ich verstehe. Mit meinem begrenzten Wissen fand ich in der Quelle, dass 'executeTransactionAsync' eine neue' RealmAsyncTask' erstellt und mit jeder ausstehenden Transaktion Realm eine neue 'bgRealm' Instanz erstellt. Obwohl es nach 'submitTransaction' geschlossen werden kann, aber wenn es sich um eine Transaktion handelt, kann ich nicht alle Instanzen manuell stoppen, so dass ich die Realm-Datei nicht löschen kann. – NamNH

Verwandte Themen