2017-09-16 2 views
0

Ich arbeite an Volley POST Anfrage und ich führe die Post in einem separaten Thread. Das Problem, das ich sehe, ist RequestFuture immer Timeouts sofort (in weniger als einer Sekunde), auch wenn Timeout-Wert festgelegt wurde. Könnte jemand bitte helfen? Auf die Server-URL kann zugegriffen werden, und sie gibt 200 OK zurück, aber RequestFuture get wartet nicht auf die Serverantwort. Fehler: java.util.concurrent.ExecutionException: com.android.volley.TimeoutErrorVolley Netzwerk Timeout immer

Thread t = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       RequestFuture<JSONObject> future = RequestFuture.newFuture(); 
       JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, jsonBody, future, future); 
       RequestQueue queue = Volley.newRequestQueue(context); 
       queue.add(request); 

       try { 
        JSONObject response = future.get(50, TimeUnit.SECONDS); 
        if(response != null) { 
         DialogUtility.alert(context, response.toString()); 
        } 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } catch (ExecutionException e) { 
        e.printStackTrace(); 
       } catch (TimeoutException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 

     t.start(); 

Antwort

0

Versuchen Sie dies in Ihrem Code.

request.setRetryPolicy(new DefaultRetryPolicy(100000, 5, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
  1. DefaultRetryPolicy wird in RetryPolicy implementiert und RetryPolicy ist eine Schnittstelle;
  2. Der Parameter 1 im Konstruktor DefaultRetryPolicy ist das eingestellte Timeout und der Standardwert ist 2500. Sie können es etwas länger einstellen;
  3. Der Parameter 2 im Konstruktor DefaultRetryPolicy legt die maximale Anzahl der wiederholten Anforderungen fest, standardmäßig den Wert 1 und kann auf 0 gesetzt werden.
  4. Der Parameter 3 im DefaultRetryPolicy Konstruktor festgelegt wird, damit Sie ein Backoff-Multiplikator spezifizieren, die verwendet werden können, < Index gibt Um zu vermeiden „> Anforderungsdaten von dem RESTful-Server, der Standardwert ist 1, 1, wenn zu erreichen Dies kann einfach als "jedes Mal, wenn eine Anfrage lange vor einer Timeout-Anfrage ist" lang * 2> "und so weiter verstanden werden.
Verwandte Themen