2017-02-01 9 views
9

जब हम आरएक्स के साथ एपीआई आराम कॉल करने के लिए रेट्रोफिट 2 का उपयोग करते हैं, तो एकल या अवलोकन करने के लिए सबसे अच्छा तरीका क्या है?आरएक्स 2 एंड्रॉइड एपीआई कॉल के लिए बेहतर या अवलोकन योग्य क्या है?

Observable और Single के बीच
public interface ApiService{ 

Single<Data> getDataFromServer(); 

Observable<Data> getDataFromServer(); 
} 
+1

अगर मैं मैं एकल, – Blackbelt

+0

धन्यवाद का प्रयोग करेंगे चुनने के लिए किया था, मैं इससे सहमत के रूप में हम केवल एक ही तत्व का उपभोग, हालांकि मैं एक या एक और चुनने के बारे में अधिक प्रतिक्रिया प्राप्त करना चाहते हैं। –

उत्तर

10

मैं एक Single का उपयोग कर के रूप में यह डाटा प्रवाह की अधिक सटीक प्रतिनिधित्व है सुझाव देंगे: यदि आप सर्वर को एक अनुरोध और आप प्राप्त या तो एक डेटा का उत्सर्जन कर या एक त्रुटि:

Single:  onSubscribe (onSuccess | onError)? 

एक Observable के लिए आप सैद्धांतिक रूप से एक त्रुटि डेटा और के कई उत्सर्जन मिल सकता है

Observable: onSubscribe onNext? (onCompleted | onError)? 

हालांकि, यदि आप का उपयोग कर रहे हैं, तो मैं Single के बजाय Maybe का उपयोग करने का सुझाव दूंगा। उन दोनों के बीच का अंतर यह है कि Maybe सर्वर से प्रतिक्रिया प्राप्त करते समय भी मामले को संभालता है लेकिन इसमें कोई शरीर नहीं है।

Maybe:  onSubscribe (onSuccess | onCompleted | onError)? 
+1

दिलचस्प, मुझे "शायद" के बारे में कुछ भी पता नहीं था, ध्यान में रखने के लिए एक महत्वपूर्ण तत्व लगता है। एफवाईआई: https://github.com/ReactiveX/RxJava/wiki/What's- अलग-in-2.0#maybe –

+0

हाँ, यह भविष्य में संदर्भ * के लिए * बिल्कुल नया है। इसके अलावा एफवाईआई: https://medium.com/@manuelvicnt/rxjava2-android-mvvm-lifecycle-app-structure-with-retrofit-2-cf903849f49e – Lamorak

5

अंतर नहीं बल्कि अर्थ है। जब आप Single कुछ घोषित कर रहे हैं तो आप कह रहे हैं कि यह देखने योग्य मूल्यों की श्रृंखला नहीं, केवल एक मान उत्पन्न करने जा रहा है।

उचित अर्थपूर्ण प्रकारों का उपयोग करना आपके एपीआई को दस्तावेज करने का सबसे अच्छा तरीका है।

+0

क्या यह एकल प्रतिक्रिया के अनुरूप नहीं होगा, न कि एकल वस्तु? – Omaraf

संबंधित मुद्दे