मुझे रेट्रोफिट के आरएक्सजेवा समर्थन का उपयोग करके अवलोकन करने योग्य अवलोकन के साथ परेशानी हो रही है। मैं शायद इसका गलत उपयोग कर रहा हूं कि इसका उपयोग कैसे किया जाए, अन्यथा यह रेट्रोफिट में एक बग हो सकता है। उम्मीद है कि यहां कोई व्यक्ति मुझे समझने में मदद कर सकता है कि क्या हो रहा है। संपादित करें: मैं इन प्रतिक्रियाओं के लिए MockRestAdapter का उपयोग कर रहा हूं - यह प्रासंगिक हो सकता है क्योंकि मुझे लगता है कि RxSupport कार्यान्वयन थोड़ा अलग है।चेनिंग रेट्रोफिट सेवाएं डब्ल्यू/आरएक्सजेवा समर्थन
यह एक नकली बैंकिंग ऐप है। यह एक स्थानांतरण करने की कोशिश कर रहा है, और हस्तांतरण पूरा होने के बाद, खाता खाते को अपडेट करने के लिए इसे एक खाता अनुरोध करना चाहिए। फ्लैटमैप को आजमाने के लिए यह मूल रूप से सिर्फ एक बहाना है। निम्नलिखित कोड दुर्भाग्य से काम नहीं करता है, कोई भी सदस्य नहीं कभी सूचित किया जाए:
केस 1: दो पुराना वापस का उत्पादन observables
हस्तांतरण सेवा चेनिंग (ध्यान दें: रिटर्न एक पुराना वापस का उत्पादन नमूदार):
@FormUrlEncoded @POST("/user/transactions/")
public Observable<TransferResponse> transfer(@Field("session_id") String sessionId,
@Field("from_account_number") String fromAccountNumber,
@Field("to_account_number") String toAccountNumber,
@Field("amount") String amount);
खाता सेवा (ध्यान दें: रिटर्न एक पुराना वापस का उत्पादन नमूदार):
@FormUrlEncoded @POST("/user/accounts")
public Observable<List<Account>> getAccounts(@Field("session_id") String sessionId);
चेन दो पुराना वापस का उत्पादन एक साथ observables:
transfersService.transfer(session.getSessionId(), fromAccountNumber, toAccountNumber, amount)
.flatMap(new Func1<TransferResponse, Observable<? extends List<Account>>>() {
@Override public Observable<? extends List<Account>> call(TransferResponse transferResponse) {
return accountsService.getAccounts(session.getSessionId());
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
केस 2: अपने ही नमूदार बनाने और साथ चेनिंग एक पुराना वापस का उत्पादन एक
मैं के लिए रेट्रोफिट में आरएक्स समर्थन में बनाया ध्यान नहीं देते हैं " फ्लैट मैप किया गया "कॉल, यह पूरी तरह से काम करता है! सभी ग्राहकों को अधिसूचित किया जाता है। नीचे देखें:
नए खाते सेवा (ध्यान दें: एक नमूदार उत्पादन नहीं करता है):
@FormUrlEncoded @POST("/user/accounts")
public List<Account> getAccountsBlocking(@Field("session_id") String sessionId);
अपने ही नमूदार बनाएँ और आइटम फेंकना अपने आप:
transfersService.transfer(session.getSessionId(), fromAccountNumber, toAccountNumber, amount)
.flatMap(new Func1<TransferResponse, Observable<? extends List<Account>>>() {
@Override public Observable<? extends List<Account>> call(TransferResponse transferResponse) {
return Observable.create(new Observable.OnSubscribe<List<Account>>() {
@Override public void call(Subscriber<? super List<Account>> subscriber) {
List<Account> accounts = accountsService.getAccountsBlocking(session.getSessionId());
subscriber.onNext(accounts);
subscriber.onCompleted();
}
});
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
किसी भी मदद की बहुत होगा की सराहना की!
रेट्रोफिट और आरएक्सजेवा का कौन सा संस्करण आप उपयोग कर रहे हैं? –