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