2017-09-16 5 views
0

발리 POST 요청을 처리 중이며 게시물을 별도의 스레드로 실행합니다. 내가 볼 수있는 문제는 RequestFuture가 시간 초과 값이 설정된 경우에도 즉시 (초 미만) 시간 초과입니다. 누군가 제발 도와 줄 수 있니? 서버 URL에 액세스 할 수 있으며 200 OK를 반환하지만 RequestFuture get은 서버 응답을 기다리지 않습니다. 오류 : java.util.concurrent.ExecutionException : com.android.volley.TimeoutError발리 네트워크가 항상 시간 초과 됨

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(); 

답변

0

코드에서이보십시오.

request.setRetryPolicy(new DefaultRetryPolicy(100000, 5, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
  1. DefaultRetryPolicyRetryPolicy 구현하고 RetryPolicy는 인터페이스이다;
  2. DefaultRetryPolicy 생성자의 매개 변수 1은 설정 시간 초과이며 기본값은 2500입니다. 조금 더 길게 설정할 수 있습니다.
  3. DefaultRetryPolicy 생성자의 매개 변수 2는 반복 요청의 최대 수를 설정하는 것으로 기본값은 1이며 0으로 설정할 수 있습니다.
  4. DefaultRetryPolicy 생성자의 매개 변수 3은 달성에 사용할 수있는 백 오프 멀티 플라이어를 지정할 수 있도록 설정됩니다. 인덱스 반환 값 RESTful 서버에서 데이터를 요청하지 않으려면 기본값 1, 1 일 때, "요청이"long * 2> "등의 시간 초과 요청보다 길기 때마다 간단히 이해할 수 있습니다.