为什么future.get()总是为Volley RequestFuture超时?

我想做一个同步排球网络请求。我正在使用请求期货等待响应,但future.get()通话总是超时(不管超时设置为多长时间)。我已经单独测试了每个组件,除了使用未来之外,没有任何东西似乎导致了错误。关于我在这里没有错的任何想法?为什么future.get()总是为Volley RequestFuture超时?

Activity.java:persistData()

postCampaign(campaign); 

Activity.java:postCampaign()

private boolean postCampaign(final Campaign c) { 

RequestFuture<String> future = RequestFuture.newFuture();

StringRequest request = new StringRequest(Request.Method.POST, url, future, future) {

@Override

protected Map<String, String> getParams()

{

Map<String, String> params = new HashMap<>();

// put data

return params;

}

};

NetworkController.getInstance(this).addToRequestQueue(request);

try {

String response = future.get(5, TimeUnit.SECONDS);

Log.d("Volley", "" + response);

return !response.contains("Duplicate");

} catch (InterruptedException|ExecutionException|TimeoutException e) {

Log.d("Volley", "[FAILED] " + e.getClass());

return false;

}

}

奇怪的是,虽然,单步调试代码时,看来RequestFuture的onResponse方法用适当的响应进行调用。所以看起来RequestFuture似乎没有正确处理响应。

回答:

我想我已经得出结论,要么排球是不能够完全同步的网络请求或至少是它是不值得的。我最终在启动时显示了一个微调,并在服务器响应成功消息时在Volley请求的onResponse方法中停止了它。就用户而言,它以相同的方式工作。

以上是 为什么future.get()总是为Volley RequestFuture超时? 的全部内容, 来源链接: utcz.com/qa/266277.html

回到顶部