当前位置: 首页 > 知识库问答 >
问题:

未来。get(长超时,时间单位)未超时

宗政功
2023-03-14

我无法使用截击库。我不想无限期地等待请求,所以我不想设置超时。但它不起作用。我在其他地方也有同样的东西(我使用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个答案

充修能
2023-03-14

我解决了这个问题!

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

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

 类似资料:
  • 我正在使用ExecutorService.invokeAll(Callable, timeout, TimeUnit)方法 在提交给ExecutorService的每个Callable中,我都有一个future.get() 未来会发生什么。即使executorService已超时,get()仍将在后台运行? 我必须指定未来的超时时间吗。获取(timeout,TimeUnit)并抛出TimeoutE

  • 文档有点混乱。如果超时,该方法将返回什么?文件上写着“计算结果”,但如果计算超时怎么办?它是空的吗? 谢谢

  • 假设我有一个函数,它调用一个阻塞可中断操作。我想在超时的情况下异步运行它。也就是说,我想在超时到期时中断函数。 所以我正在尝试做这样的事情: 问题是 (1) 中的 可以为 null,因为 (2) 尚未将其设置为当前线程。在这种情况下,我想等到 设置完毕。最好的方法是什么?

  • 我是新的完全未来。我试图为元素列表(即参数)调用并行方法,然后将结果组合起来创建最终响应。我还试图设置50毫秒的超时,以便如果调用不返回50毫秒,我将返回默认值。 到目前为止,我已经尝试过: 但我一直得到错误说: 有人能告诉我我在这里做错了什么吗?如果我走错了方向,请纠正我。 谢谢

  • 我想在应用程序启动时加载一些数据,这些数据将被所有活动使用。我在应用程序的onCreate方法中这样做,因为我希望在显示任何活动之前下载这些数据,所以我尝试使用RequestFuture发出同步请求。但是,始终会抛出TimeoutException。 什么是获得应用程序范围的数据的最佳方式,记住没有一个活动是首先启动的?

  • 我使用前端Spring云应用程序(微服务)作为Zuul代理()将请求从外部源路由到使用Spring云编写的其他内部微服务(Spring boot) Zuul服务器直接来自示例部分中的应用程序 我在本地运行了这组服务,这一切似乎都工作正常,但如果我在网络上运行它有一些负载,或通过VPN,然后我开始看到Zuul转发错误,我在日志中看到客户端超时。 有没有办法改变Zuul转发的超时时间,这样我就可以从眼