首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OkHttp和Retrofit抛出IO:流3没有进展

OkHttp和Retrofit抛出IO:流3没有进展
EN

Stack Overflow用户
提问于 2019-06-21 16:19:15
回答 1查看 215关注 0票数 2

我的Charles代理中出现"IO: Stream 3 not progressing“。

我有一个简单的RxJava调用:

代码语言:javascript
复制
    subscription.add(api.sendSources(sendDataBody)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({
                callback.onFinished(it)
            }, {
                callback.onError(-1)
            }))

一个简单的POJO:

代码语言:javascript
复制
data class SendDataBody(
        @Json(name = "authtoken")
        var authToken: String,

) : Serializable

open class SendDataResponse(
        @Json(name = "success")
        var success: Boolean,

        @Json(name = "error")
        var error: String?
)

这是我的界面:

代码语言:javascript
复制
@Headers(
        "Content-Type: application/json; charset=UTF-8",
        "accept-encoding: gzip, deflate",
        "Accept: */*",
        "Cache-Control: no-cache"
)
@POST("sourcedata")
fun sendSources(@Body sendDataBody: SendDataBody) : Single<Any>

以下是库版本:

代码语言:javascript
复制
// Retrofit
implementation "com.squareup.retrofit2:retrofit:2.3.0"
implementation "com.squareup.retrofit2:converter-moshi:2.3.0"
implementation "com.squareup.okhttp3:logging-interceptor:3.9.0"
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

// RxJava lib
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation "io.reactivex.rxjava2:rxjava:2.2.6"
implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'

当与Charles一起检查时,第一次应用程序总是说"IO Stream 3没有进展“,但应用程序会自动再次调用,第二次它工作正常。我还没有编写任何重试API调用的代码。当使用Postman进行同样的尝试时,它会立即生效。所以它不是后端。我试着模仿Postman的头,也试着不用RxJava,没有区别。

Second time工作正常:

连接调试器时,错误消息为:

代码语言:javascript
复制
result = {Response@7889} "Response{protocol=h2, code=200, message=, url=https://api.myserver.nl/sourcedata}"
 body = "�\b�������������V*.MNN-.V�JK�)N�QJ-*�"
 errorBody = null

似乎来自服务器的响应是错误的,但第二次对象是正确的。

EN

回答 1

Stack Overflow用户

发布于 2019-07-03 16:53:09

我也遇到过类似的问题。Okhttp静默地执行此操作,它会尝试默认路由,如果失败,则会根据每个示例尝试不同的路由。

在我的例子中,ipv6出现了问题,这是失败的,第二次重试时它正在使用ipv4,这是工作的。

从日志中我不能说如何修复它,但我会从Okhttp调试RetryAndFollowUpInterceptor,并找出有关哪个路由失败,哪个路由成功的更多细节。

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

https://stackoverflow.com/questions/56699489

复制
相关文章

相似问题

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