मेरे Android परियोजनाओं में, मैं अपने डेटा भंडारण इंजन के रूप में realm का उपयोग करें। मुझे यह पसंद है!
मैं भी RxJava उपयोग करें, क्योंकि यह "सूत्रण" बनाता है इतना आसान है, और मैं सच में पूरे "प्रतिक्रियाशील मानसिकता" की तरह। मुझे यह पसंद है!
क्षेत्र, RxJava, asObservable() और doOnUnsubscribe()
मैं एक एमवीपी पैटर्न + कुछ "स्वच्छ वास्तुकला" विचारों का उपयोग अपने एप्लिकेशन बनाने के लिए।
मेरा Interactors
केवल Realm
के बारे में पता है। मैं प्रत्यक्ष की मदद से डेटा का पर्दाफाश, इस तरह:
@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>());
}
समस्या है, मेरी doOnUnsubscribe
पक्ष प्रभाव Realm
से पहले कहा जाता हो जाता है अपनी बात कर सकते हैं निपटने उजागर नमूदार:
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)
मेरे द्वारा बनाए गए उपयोग के इस मामले एक sandbox परियोजना।
मुझे वास्तव में रीयलम + आरएक्सजेवा का उपयोग करना पसंद है, लेकिन मुझे close
का वास्तविक समाधान प्रतीत नहीं होता है जब मैं unsubscribe
(जब आमतौर पर गतिविधि नष्ट हो जाती है तो मैं सदस्यता छोड़ता हूं)। कोई विचार?
संपादित करें 1: https://github.com/realm/realm-java/issues/2357
संपादित 2: बहुत सक्रिय दायरे टीम के लिए धन्यवाद, वहाँ पहले से ही एक pull request इस समस्या को हल करने के लिए है।
अवलोकन करने योग्य # के माध्यम से दायरे को लपेटने पर विचार करें, यह आपके getManagedRealm() विधि को सरल बना देगा: http://pastebin.com/CrzryvCq –
मैं आपके समाधान का प्रयास करता हूं और मुझे समस्या का सामना करना पड़ता है: वास्तविक फ़ाइल में बहुत अधिक खुले –