2015-06-01 19 views
21

सिंक और एसिंक कॉल का उपयोग करते समय मुझे रेट्रोफिट का ठोस समझ है। हालांकि, मैं एक छोटी सी समस्या है जब कुछ जटिल कार्य है, जो मैं करने के लिए है बनाने का सामना करना पड़ा:आरएक्सजेवा + रेट्रोफिट - एकाधिक कॉल

  1. क्रम में पहचान पत्र (लगभग 20-30 आईडी)
  2. की सूची प्राप्त करने के लिए पहचान पत्र की सूची प्राप्त करने के बाद एक अनुरोध करें, मैं आईडी द्वारा परिभाषित प्रत्येक ऑब्जेक्ट के बारे में जानकारी प्राप्त करने के लिए एसिंक कॉल करना चाहते हैं। मैं pararrel में 20-30 अनुरोध करना चाहता हूँ। मैं एसिंक कॉल से सभी डेटा प्राप्त करने के प्रबंधन के बाद यूआई को अपडेट करने के लिए इसे देखना चाहता हूं।

मैंने उस मुद्दे के बारे में पढ़ा और मुझे एहसास हुआ कि आरएक्सजेवा मेरी समस्या का समाधान करेगा। लेकिन स्पष्ट रूप से, मैंने पूरी प्रक्रिया को समझने के लिए अब तक वास्तव में कठिन पाया है।

यह अच्छा होगा अगर मैंने RxJava/RxAndroid समस्या में विसर्जित करने के लिए कुछ सही उदाहरण पढ़ा।

उत्तर

3

ऐसा लगता है क्या तुम सच में की तलाश में हैं जानकारी या कैसे RxJava के साथ शुरू करने पर उदाहरण है की तरह है, इसलिए मैं सुझाव देंगे कि आप दान ल्यू द्वारा लेख के इस उत्कृष्ट श्रृंखला पर एक नजर है: http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/

इस श्रृंखला में आपको अपनी सुविधा को कार्यान्वित करने का एक अच्छा विचार देने के लिए पर्याप्त सामग्री होनी चाहिए।

+4

एक बहुत ही उपयोगी ट्यूटोरियल श्रृंखला के लिए एक महान सूचक है कि। लेकिन यह एक लंगड़ा SO जवाब है। –

12

इस उदाहरण के साथ आप आईडी की एक सूची प्राप्त कर सकते हैं, इसे व्यक्तिगत अवलोकन में विभाजित कर सकते हैं, प्रत्येक व्यक्तिगत आईडी के लिए एक सेवा कॉल कर सकते हैं और प्रत्येक getDetails प्रतिक्रिया के लिए n बार अधिसूचित कर सकते हैं।

service.getIds() 
     .flatMap(ids -> Observable.from(ids)) 
     .map(id -> service.getDetails(id)) 
     .subscribe(detailed -> updateUi(detailed)); 

आप कई समानांतर कॉल पर प्रतीक्षा करने के लिए Observable.zip समारोह का उपयोग कर सकते हैं, लेकिन मैं अगर तुम एक चर आकार कॉल में उपयोग कर सकते हैं पता नहीं है।

इस example पर एक नज़र डालें: प्रत्यक्ष के लिए

रेट्रोफिट समर्थन भी आसान कई बाकी एक साथ कॉल गठबंधन करने के लिए बनाता है। उदाहरण के लिए, मान लें कि हमारे पास एक कॉल है जो फोटो प्राप्त करती है और दूसरा जो मेटाडेटा प्राप्त करती है। हम परिणाम एक साथ ज़िप कर सकते हैं:

Observable.zip(
    service.getUserPhoto(id), 
    service.getPhotoMetadata(id), 
    (photo, metadata) -> createPhotoWithData(photo, metadata)) 
    .subscribe(photoWithData -> showPhoto(photoWithData)); 
संबंधित मुद्दे