2
我想做一个同步排球网络请求。我正在使用请求期货等待响应,但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似乎没有正确处理响应。
您确定您确实正在向服务器发送请求吗?看起来您使用的是HTTP协议,您是否使用过Fiddler或Wireshark来窥探正在发送的内容? – Imposter
当我使用具有不同响应/错误侦听器的相同字符串请求时,数据成功发布并返回预期响应。我只需要做到这一点同步(我没有运气)。 –
看起来您需要将请求添加到RequestQueue。 'RequestQueue队列= Volley.newRequestQueue(getBaseContext()); queue.add(request);'。让我们知道它是否有效。 – tsolakp