2017-09-16 49 views
0

我正在处理Volley 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>“等等。