In meinen Android-Projekten verwende ich als meine Datenspeicher-Engine. Ich liebe es!
Ich benutze auch RxJava, weil es "Threading" so viel einfacher macht, und ich mag wirklich die ganze "reaktive Denkweise". Ich liebe es!
Realm, RxJava, asObservable() und doOnUnsubscribe()
Ich benutze ein MVP-Muster + einige "saubere Architektur" Ideen, um meine Apps zu bauen.
Meine Interactors
sind die einzigen, die über Realm
wissen. Ich aussetzen Daten mit Hilfe von beobachtbaren, wie folgt aus:
@Override
public Observable<City> getHomeTown() {
final Realm realm = Realm.getDefaultInstance();
return realm.where(City.class).equalTo("name", "Cluj-Napoca").findAllAsync().asObservable()
.doOnUnsubscribe(new Action0() {
@Override
public void call() {
realm.close();
}
})
.compose(new NullIfNoRealmObject<City>());
}
Das Problem ist meine doOnUnsubscribe
Nebeneffekt vor Realm
aufgerufen wird, seine Sache zu tun, die freiliegende Handhabung beobachtbar:
Caused by: java.lang.IllegalStateException: This Realm instance has already been closed, making it unusable.
at io.realm.BaseRealm.checkIfValid(BaseRealm.java:344)
at io.realm.RealmResults.removeChangeListener(RealmResults.java:818)
at io.realm.rx.RealmObservableFactory$3$2.call(RealmObservableFactory.java:137)
at rx.subscriptions.BooleanSubscription.unsubscribe(BooleanSubscription.java:71)
at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:124)
at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:113)
at rx.Subscriber.unsubscribe(Subscriber.java:98)
at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:124)
at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:113)
at rx.Subscriber.unsubscribe(Subscriber.java:98)
at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:150)
at rx.subscriptions.CompositeSubscription.unsubscribe(CompositeSubscription.java:139)
at ro.tudorluca.realm.sandbox.city.CityPresenter.onDestroy(CityPresenter.java:62)
at ro.tudorluca.realm.sandbox.city.CityActivity.onDestroy(CityActivity.java:35)
I erstellt ein sandbox Projekt für diesen Anwendungsfall.
Ich mag wirklich Realm + RxJava, aber ich kann keine saubere Lösung zu close
der Realm-Instanz zu finden, wenn ich unsubscribe
(Ich normalerweise abmelden, wenn die Aktivität zerstört wird). Irgendwelche Ideen?
Edit 1: https://github.com/realm/realm-java/issues/2357
Edit 2: Dank des sehr aktiven Bereich Team, gibt es bereits ein pull request dieses Problem zu beheben.
Erwägen, Realm über Observable # zu umhüllen, mit, dies wird Ihre getManagedRealm() Methode vereinfachen: http://pastebin.com/CrzryvCq –
Ich versuche Ihre Lösung und ich konfrontiert Problem: zu viele in Realm-Datei öffnen –