首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Android中设置http响应的最大等待时间?

如何在Android中设置http响应的最大等待时间?
EN

Stack Overflow用户
提问于 2022-09-24 09:33:23
回答 1查看 53关注 0票数 0

我使用Android推荐的Cronet库来发出HTTP请求,但是我找不到关于如何实现某些特性的信息。例如,我需要为所有HTTP请求设置最大等待时间。换句话说,如果HTTP请求花费的时间超过'X‘秒,那么它应该被视为失败的请求。我如何在Cronet中配置这个?

我的代码:

代码语言:javascript
复制
fun initCronet() { // this is called only once
    executor = Executors.newSingleThreadExecutor()
    engine = CronetEngine.Builder(context) 
        .enableHttp2(true)
        .build()
}

suspend fun myFunction() {
    suspendCoroutine<HttpResponseContainer> {
        val callback = CoroutinesNetworkCallback(it)
        val url = "http://myhost.com/my-endpoint"

        engine.newUrlRequestBuilder(url, callback, executor)
            .addHeader("Content-Type", "application/json; charset=UTF-8")
            .build().start()
    }
}

回调看起来大约如下所示:

代码语言:javascript
复制
class CoroutinesNetworkCallback (
  private val continuation: Continuation<HttpResponseContainer>,
) : UrlRequest.Callback() {

  override fun onRedirectReceived(request: UrlRequest, info: UrlResponseInfo, newUrl: String) {
      request.cancel()
  }

  override fun onResponseStarted(request: UrlRequest, info: UrlResponseInfo) {
      // init buffer
  }

  override fun onReadCompleted(request: UrlRequest, info: UrlResponseInfo, buffer: ByteBuffer) {
      // retrieve response
  }

  override fun onFailed(request: UrlRequest, info: UrlResponseInfo, error: CronetException) {
      continuation.resumeWithException(RuntimeException("request failed"))
  }

  override fun onSucceeded(request: UrlRequest, info: UrlResponseInfo) {
      continuation.resume(HttpResponseContainer(httpStatusCode))
  }
}
EN

回答 1

Stack Overflow用户

发布于 2022-09-24 09:52:07

您可以在构建器中添加connectTimeout、writeTimeout和readTimeout

connectTimeout :尝试连接主机地址writeTimeout和readTimeout的最大时间:发送请求和接收响应的最大时间

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73836145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档