我在使用Volley库时遇到了麻烦。我不想无限期地等待请求,所以我不想设置超时。但它没有用。我在其他地方(我使用RequestFuture而不是RequestFuture)有相同的东西,它工作正常,但在这里我不能设置它工作。
static final long TIMEOUT = 3;
static final TimeUnit TIMEOUT_TIME_UNIT = TimeUnit.SECONDS;
public boolean fetchPoiUserRating(PoiModel poi, String userId) throws RemoteDataException {
RequestQueue queue = mRequestQueue;
String url = API_POI_RATING_URL + "/" + poi.getId() + "/" + userId;
RequestFuture<JSONObject> future = RequestFuture.newFuture();
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, future, future);
future.setRequest(queue.add(request));
try {
Log.d(TAG, "Start poi user rating fetch");
JSONObject response = future.get(TIMEOUT, TIMEOUT_TIME_UNIT); // this should timeout but it doesn't
Log.d(TAG, "Finished poi user rating fetch");
poi.setUserRating((float) response.getDouble("rating"));
return true;
} catch (InterruptedException | ExecutionException | JSONException | TimeoutException e) {
handleError(e);
return false;
}
}
如果你能提供任何帮助,那就太棒了!感谢
答案 0 :(得分:0)
我能够解决这个问题!
问题是服务器正在回答状态代码204(NO_CONTENT)并且没有发送任何内容。
最可能的解释是,因为正在返回成功状态代码(2XX),它会无限期地等待永远不会出现的JSONObject,忽略超时(因为它收到了成功代码)。