RequestFuture.get(长超时,Timeunit单位)没有超时

时间:2017-04-29 17:38:26

标签: java android android-volley java-threads

我在使用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;
    }
}

如果你能提供任何帮助,那就太棒了!感谢

1 个答案:

答案 0 :(得分:0)

我能够解决这个问题!

问题是服务器正在回答状态代码204(NO_CONTENT)并且没有发送任何内容。

最可能的解释是,因为正在返回成功状态代码(2XX),它会无限期地等待永远不会出现的JSONObject,忽略超时(因为它收到了成功代码)。