मैं अपने एंड्रॉइड ऐप में rxjava का उपयोग नेटवर्क अनुरोधों को अतुल्यकालिक रूप से संभालने के लिए कर रहा हूं। अब मैं एक निश्चित समय बीतने के बाद ही असफल नेटवर्क अनुरोध को पुनः प्राप्त करना चाहूंगा।
क्या किसी ऑब्जर्वेबल पर रिट्री () का उपयोग करने का कोई तरीका है लेकिन एक निश्चित देरी के बाद ही पुन: प्रयास करना है?
क्या ऑब्जर्वबल को यह बताने का कोई तरीका है कि वर्तमान में उसे वापस लिया जा रहा है (जैसा कि पहली बार आजमाया गया है)?
मैंने डिब्यू () / थ्रॉटलव्हाइट टाइमआउट () पर एक नज़र डाली थी, लेकिन वे कुछ अलग कर रहे हैं।
संपादित करें:
मुझे लगता है कि मुझे ऐसा करने का एक तरीका मिला, लेकिन मैं या तो इस बात की पुष्टि करना चाहूंगा कि यह करने का सही तरीका है या अन्य, बेहतर तरीके।
मैं जो कर रहा हूं वह यह है: मेरे ऑब्जर्वेबल की एक कॉल () विधि में। सदस्यता लें, इससे पहले कि मैं सब्सक्राइबर्स को ऑनर्र () विधि से कॉल करूं, मैं बस थ्रेड को सोते समय वांछित मात्रा में देता हूं। इसलिए, प्रत्येक 1000 मिलीसेकंड को पुनः प्राप्त करने के लिए, मैं इस तरह से कुछ करता हूं:
@Override
public void call(Subscriber<? super List<ProductNode>> subscriber) {
try {
Log.d(TAG, "trying to load all products with pid: " + pid);
subscriber.onNext(productClient.getProductNodesForParentId(pid));
subscriber.onCompleted();
} catch (Exception e) {
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e.printStackTrace();
}
subscriber.onError(e);
}
}
चूंकि यह विधि एक IO थ्रेड पर चल रही है, वैसे भी यह UI को ब्लॉक नहीं करता है। एकमात्र समस्या जो मैं देख सकता हूं, वह यह है कि पहली त्रुटि भी देरी के साथ रिपोर्ट की जाती है, इसलिए देरी तब भी होती है, जब कोई रिट्रीट () न हो। मुझे यह अच्छा लगता है अगर देरी एक त्रुटि के बाद लागू नहीं की गई थी , बल्कि एक रिट्री से पहले (लेकिन पहले प्रयास से पहले स्पष्ट रूप से नहीं)।
Error:(73, 20) error: incompatible types: RetryWithDelay cannot be converted to Func1<? super Observable<? extends Throwable>,? extends Observable<?>>