2014-10-08 8 views
15

पर सेट किया गया है, मैं एक एंड्रॉइड प्रोजेक्ट पर काम कर रहा हूं जो एसिंक अनुरोधों और छविकिंग के लिए वॉली का उपयोग करता है। किसी भी तरह से अनुरोध दो बार सर्वर पर दोबारा मार रहा है, भले ही मेरे पास रेट्री पॉलिसी 0 पर सेट हो। मैंने डिफ़ॉल्ट सफलतापूर्वक पॉलिसी ऑब्जेक्ट से मूल्यों को ओवरराइड करने की कोशिश की।एंड्रॉइड वॉली सर्वर पर 2 अनुरोध करता है जब नीति का पुन: प्रयास 0

अनुरोध:

@Override 
public void gravarVendaMobile(final Usuario usuarioAutenticado, final AsyncCallback<String> callback) { 
    obterParametrosDeInicializacao().done(new DoneCallback<ParametrosDeInicializacao>() { 
     @Override 
     public void onDone(final ParametrosDeInicializacao param) { 
      requestQueue.add(setDefaultRetryPolicy(new StringRequest(
        Method.POST, 
        urlPara(GRAVAR_VENDA_MOBILE, usuarioAutenticado.getFilial(), usuarioAutenticado.getCodigo()), 
        listener(callback), 
        //errorListener(R.string.could_not_load_produtos, callback) 
        new ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError error) { 
          callback.onError(new MessageCodeException(error.networkResponse.statusCode, error)); 
         } 
        } 
      ) { 

       @Override 
       public Map<String, String> getHeaders() throws AuthFailureError { 
        Map<String, String> headers = new HashMap<String, String>(); 
        headers.put("Encoding", "UTF-8"); 
        headers.put("Accept", "application/json"); 
        headers.put("Content-type", "application/json; charset=UTF-8"); 
        return headers; 
       } 


      })); 
     } 
    }); 
} 

पुन: प्रयास नीति:

private Request<?> setDefaultRetryPolicy(Request<?> request) { 
    request.setRetryPolicy(new DefaultRetryPolicy(30000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

    return request; 
} 

असल में, मैं 0 पुनर्प्रयास के साथ 30 सेकेंड के समय समाप्ति सेट करना चाहते हैं यहां कुछ नमूना कोड है।

यदि मैं रीट्रीज़ की संख्या बढ़ाता हूं तो यह अपेक्षित काम करता है, लेकिन अगर मैं इसे 0 पर सेट करता हूं तो यह 2 अनुरोध करता है।

यहां कुछ मदद चाहिए।

संपादित

मैं झूठी अंदर एंड्रॉयड के लिए रखें जिंदा संपत्ति की स्थापना करके अपनी समस्या का समाधान करने में कामयाब रहे। उदाहरण:

System.setProperty("http.keepAlive", "false"); 

मैंने कक्षा के अंदर कोड की इस पंक्ति को जोड़ा जहां मैं अनुरोधक आयात करता हूं और अनुरोध करता हूं।

इसके अलावा, जांचें कि क्या आपके पास सर्वर के पास रहने वाले हेडर हैं या नहीं।

यह post समाधान प्राप्त करने में मदद मिली। या आप चाहते हैं के रूप में अधिक 20second को

myRequest.setRetryPolicy(new DefaultRetryPolicy(0, 
      DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
+2

साथ यह तय हो तुम, एक अलग जवाब के रूप में अपने संपादित पोस्ट करना चाहिए, क्योंकि यह इस सवाल का आप देख रहे थे का हल (स्वयं जवाब अनुमति दी जाती है) है। –

+0

मुझे एक ही समस्या का सामना करना पड़ रहा है। मैंने टाइमआउट को 60 सेकेंड तक बढ़ा दिया, क्योंकि रीट्रीज़ दो बार चलती रहती है, भले ही मेरे पास DefaultRetryPolicy (60000, 0, 0) है। क्यूं कर? – portfoliobuilder

+0

यह निश्चित रूप से आपके मुद्दे का उत्तर नहीं है, लेकिन एक साइड इफेक्ट जो समस्या का कारण नहीं बनता है। 2 चीजें स्पष्ट नहीं हैं: 1) setDefaultRetry जिसे आपने चिपकाया है, उसे कहां और कब कहा जाता है जब वॉली की ImageRequest अपनी खुद की RetryPolicy 2 सेट करता है) जो http स्टैक का उपयोग करता है क्योंकि HURL कुछ समय के लिए okhttp का उपयोग कर रहा है और इसमें चुपचाप पुनः प्रयास है अनुरोध उन लोगों का उत्तर देने से वास्तव में यह पता चल सकता है कि यह क्यों हो रहा है – djodjo

उत्तर

1

मैं इस नो-दोहराने नीति सेट करने के लिए उपयोग) वर्ग इस तरह दिखता है:

protected boolean hasAttemptRemaining() { 
    return this.mCurrentRetryCount <= this.mMaxNumRetries; 
} 

जो मैं देख सकता हूं, अधिकतमNumRetries को 0 पर सेट करना होगा मैं इसे वापस कर देता हूं अगर उसने अभी तक एक पुनः प्रयास नहीं किया है।

मैं एक

request.setRetryPolicy(new DefaultRetryPolicy(0, -1, 0); 
0

बस सेट टाइमआउट, और 0

req.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0, 
    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
1

DefaultRetryPolicy.class के hasAttemptRemaining को पुन: प्रयास (:

+1

इसके अलावा 'mAuremptRetryCount'' हैट्री रिमोटिंग() 'को कॉल करने से पहले 'पुनः प्रयास' में वृद्धि हुई है, इसलिए पुनः प्रयास संख्या 0 पर ठीक से काम करने के लिए सेट करें। –

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