我正在尝试制作同步的Volley网络请求。我正在使用请求期货等待响应,但future.get()
调用总是超时(无论超时设置为多长时间)。我已经单独测试了每个组件,除了使用期货之外,似乎没有任何东西导致错误。关于我在这里做错了什么的想法?
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没有正确处理响应。
答案 0 :(得分:0)
我想我已经得出结论,要么Volley不能完全同步网络请求,要么至少它不值得。我最后只是在启动时显示了一个微调器,并在服务器响应成功消息时在Volley请求的onResponse
方法中停止了它。就用户而言,它的工作方式相同。