मुझे धीमे नेटवर्क पर वॉली पोस्ट अनुरोध में समस्या है। कभी-कभी My POST अनुरोध दो बार या अधिक निष्पादित किया जाता है जिसके परिणामस्वरूप 1 अनुरोध के लिए एकाधिक (2 या अधिक) पोस्टिंग होती है।

मैंने कुछ उपाय आजमाए लेकिन कोई फायदा नहीं हुआ,

कोशिश 1 :

request.retryPolicy = DefaultRetryPolicy(30000, 0, 1f)

कोशिश 2 :

request.retryPolicy = DefaultRetryPolicy(0, -1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)

कोशिश 3 : setRetryPolicy समय बढ़ाएँ।

request.setRetryPolicy(new DefaultRetryPolicy(
                    30000,
                    DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

4 प्रयास करें: RetryPolicy को 0 पुनर्प्रयास पर सेट करें और सुनिश्चित करें कि टाइमआउट सर्वर टाइमआउट से बड़ा है।

setRetryPolicy(new DefaultRetryPolicy("bigger than server timeout",
                                      0,
                                    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

कोशिश करें 5 : रिट्रीपॉलिसी बदलें। मैंने टाइमआउट मान को 50000ms . पर सेट किया है

request.setRetryPolicy(
                new DefaultRetryPolicy(
                        500000,
                        DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
                )
        );

पूर्ण स्रोत कोड: https://androidkeynotes.blogspot.com/2020/02/volley.html

वॉली लिब का उपयोग करके डुप्लिकेट पोस्ट से कैसे बचें?

2
Hari Shankar S 2 मार्च 2020, 16:02
क्या आप सकारात्मक हैं कि आपके पास वॉली रनिंग का आह्वान करने वाली किसी चीज़ के दो अलग-अलग उदाहरण नहीं हैं?
 – 
Lena Bru
2 मार्च 2020, 16:03
प्रत्येक अनुरोध का परिणाम क्या है?
 – 
Lena Bru
2 मार्च 2020, 16:04
ऐसा करने का प्रयास करें... request.retryPolicy = DefaultRetryPolicy(5000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
 – 
Bryan J. Diaz
2 मार्च 2020, 16:13
आपकी प्रतिक्रिया के लिए धन्यवाद। मैंने उपरोक्त समाधान की कोशिश की लेकिन काम नहीं किया
 – 
Hari Shankar S
2 मार्च 2020, 17:26
यह समस्या बेतरतीब ढंग से होती है (BasicNetwork.logSlowRequests: अनुरोध के लिए HTTP प्रतिक्रिया)
 – 
Hari Shankar S
2 मार्च 2020, 17:39

2 जवाब

वॉली के पास पोस्ट एपीआई को 3 बार कॉल करने का तंत्र है यदि प्रतिक्रिया परिभाषित समय में पुनर्प्राप्त नहीं होती है। हम समय अवधि बदल सकते हैं इसलिए इसे धीमे कनेक्शन में प्रतिक्रिया मिलेगी।

0
Viral Rami 9 मार्च 2020, 08:35

सबसे पहले - आपको अपने क्लाइंट/बैकएंड को इस संभावना के लिए लचीला बनाने पर दृढ़ता से विचार करना चाहिए कि आपका POST अनुरोध दो बार निष्पादित हो। क्लाइंट साइड पर विफल होने का अनुरोध करने का अनुरोध (उदाहरण के लिए टाइम आउट) जब यह वास्तव में बैकएंड पर सफल हुआ। उपयोगकर्ता फिर से प्रयास करने जा रहा है और संभावित रूप से उसी विफलता का सामना कर रहा है। इसलिए, क्लाइंट के पास बार-बार पुन: प्रयास करने में सक्षम होना और बैकएंड के पास एक खराब नेटवर्क पर क्लाइंट अनुरोध चीजों को एक बार करने की कोशिश करने की तुलना में बेहूदा तरीके से अनुरोध करना बेहतर है, जो कि मोबाइल डिवाइस पर अक्सर होने की संभावना है। क्लाइंट बनाने में आपके पास बहुत आसान समय होगा और आपके उपयोगकर्ताओं के पास बेहतर अनुभव होगा।

वैसे भी, यदि आप चाहते हैं कि वॉली केवल एक बार अनुरोध करने का प्रयास करे, दूसरे तर्क (maxNumRetries) == 0 के साथ DefaultRetryPolicy में गुजर रहा है, तो अनुरोध केवल एक बार कोशिश की जानी चाहिए, जब तक आप डिफ़ॉल्ट एचटीपीस्टैक (हर्लस्टैक) का उपयोग कर रहे हों। यदि किसी कारण से आप अभी भी Apache HTTP स्टैक का उपयोग कर रहे हैं, तो अनुरोध कनेक्ट होने में विफल होने पर वह स्टैक कुछ इनलाइन पुनर्प्रयास कर सकता है।

क्या आप वर्बोज़ लॉगिंग को सक्षम करने के लिए "adb shell setprop log.tag.Volley VERBOSE" चला सकते हैं, बलपूर्वक रोक सकते हैं और अपने ऐप को पुनरारंभ कर सकते हैं, और फिर समस्या को पुन: उत्पन्न कर सकते हैं और वॉली से लॉग प्रदान कर सकते हैं जब अनुरोध दो बार होता है? आप Android के किस डिवाइस/संस्करण पर परीक्षण कर रहे हैं? मैं नमूना कोड की सराहना करता हूं, लेकिन मुझे यकीन नहीं है कि इसे कैसे चलाया जाए क्योंकि यह पूरी तरह से काम कर रहे सेटअप की बजाय कुछ स्रोत फाइलें हैं।

आपके द्वारा लिंक किए गए थ्रेड्स से, यह कुछ स्थितियों में HttpUrlConnection के साथ एक बग हो सकता है। आप हमेशा हर्लस्टैक का विस्तार कर सकते हैं और उन लिंक्स में प्रदान किए गए कुछ वर्कअराउंड को आज़माने के लिए createConnection को ओवरराइड कर सकते हैं (जैसे setChunkedStreamingMode (0) को कॉल करना)। यदि हम उपकरणों के एक सेट या अन्य परिस्थितियों की पहचान करने में सक्षम थे जहां यह आवश्यक था, तो हम वॉली में ही शामिल करने पर विचार कर सकते थे।

आप वॉली के साथ एक और HTTP स्टैक आज़माने पर भी विचार कर सकते हैं यह देखने के लिए कि क्या यह आपके लिए काम करता है। वॉली फ़िलहाल कोई आधिकारिक जानकारी प्रदान नहीं करता है, लेकिन OkHttp या Cronet जैसी चीज़ों के लिए बहुत कुछ चल रहा है।

मुझे यह प्रतिक्रिया Google वॉली की डेवलपर टीम से मिली है।

0
Hari Shankar S 9 मार्च 2020, 10:33