我正在尝试发出同步 Volley 网络请求。我正在使用请求 future 来等待响应,但 future.get()
调用总是超时(无论超时设置为多长时间)。我已经单独测试了每个组件,除了我使用 future 之外,似乎没有什么是导致错误的。关于我在这里做错了什么有什么想法吗?
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 不能完全同步网络请求,要么至少不值得。我最终只是在开始时显示了一个微调器,并在服务器以成功消息响应时在 Volley 请求的 onResponse
方法中停止了它。就用户而言,它的工作方式相同。
关于java - 为什么 future.get() 对于 Volley RequestFuture 总是超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47995386/