यदि आप इसका उपयोग कर रहे हैं Repository
पैटर्न और स्थानीय और दूरदराज से लोड करने, यह स्थानीय वापसी के लिए समझ में आता है Maybe<T>
और दूरस्थ वापसी Single<T>
में RxJava2
?
उत्तर:
जवाब के लिए 3 № 1निश्चित रूप से! आप अपनी डिस्क / मेमोरी कैश को वापस कर सकते हैं Maybe
और अगर यह खाली है, से लौटने के लिए स्विच करें Single
नेटवर्क स्रोत। डीबी इसे साफ और तार्किक बनाता है क्योंकि डीबी कुछ भी वापस नहीं कर सकता है और न ही नेटवर्क रिस्पांस ज्यादातर हमेशा सिंगल ही रहता है। आपकी अंतिम प्रतिक्रिया एक हो सकती है Single
.
एक उदाहरण होगा:
@Override
public Single<E> get(long id) {
return fetchFromDb(id)
.switchIfEmpty(fetchFromNetwork(id))
.subscribeOn(schedulerProvider.io());
}
मैंने इसे पहले की तरह ऊपर इस्तेमाल किया है। वास्तव में, उपरोक्त न्यूयॉर्क टाइम्स से काफी प्रभावित है, लाइब्रेरी को स्टोर करें
जवाब के लिए 0 № 2
हां, मेरे पास एक ही मामला था, जबकि मैं रिपॉजिटरी पैटर्न में rxjava2 लागू कर रहा था। मैं नहीं चाहता था कि मेरी सभी रेट्रोफिट सेवा को सिंगल से हो सकता है पर वापस लौटाएं,
अपने प्रश्न के लिए, बसMaybe () का उपयोग करें
Rxjava2 रिपॉजिटरी पैटर्न का मेरा उदाहरण निम्नलिखित है:
protected Maybe<Foo> loadDataFromCache() {
Foo foo = cachedDataHelper.getFoo();
return foo != null ? Maybe.just(foo) : Maybe.empty();
}
public Single<Foo> loadDataFromMultipleRepos () {
Maybe<Foo> apiCallObservable = new FooCallRx().getAPIObservable(context).toMaybe();
Maybe<Foo> cacheObservable = loadDataFromCache();
return Maybe.concat(cacheObservable, apiCallObservable)
.toSingle();
}