为什么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