是什么导致改装,okhttp得到请求而不调用其onResponse()或onFailure()方法的原因?

时间:2018-07-18 21:51:57

标签: android request retrofit2 response okhttp3

我正在开发一个需要从服务器下载数据的移动应用程序。它工作正常,但是在对服务器进行了一些更改之后,来自Retrofit的GET请求停止了工作。 它成功发出了请求,有时甚至获得了成功的响应,但它从未调用过onResponse()或onFailure()方法,因此应用程序一直挂在那里。

基本上有2种情况:

  1. 请求已正确完成。 Okhttp接收到响应,并打印内容,但以消息结尾(“ read:Unexpected EOF!”)。之后,该应用程序停止工作。它不会冻结,不会引发任何异常,它只会保持等待状态。
  2. 请求已正确完成。 Okhttp收到了响应,但不打印内容。之后,行为与以前相同,只是停留在那里等待。

这是响应的日志,它仅包含由okhttp和系统生成的条目。有时仅显示以下日志即可:

  

com.mobileapp D / OkHttp:-> GET http://192.168.15.216:8080/analista/sincronizacion?date=2000-02-01T21%3A14%3A57 http / 1.1   com.mobileapp D / OkHttp:接受:application / json       授权:Bearer 1234Gasd34554.21       主机:192.168.15.216:8080       连接:保持活动   com.mobileapp D / OkHttp:接受编码:gzip       用户代理:okhttp / 3.10.0   com.mobileapp D / OkHttp:-> END GET   com.mobileapp D / OkHttp:-> GET http://192.168.15.216:8080/analista/sincronizacion?date=2000-02-01T21%3A14%3A57 http / 1.1   com.mobileapp D / OkHttp:接受:application / json       授权:Bearer 1234Gasd34554.21       主机:192.168.15.216:8080       连接:保持活动       接受编码:gzip       用户代理:okhttp / 3.10.0   com.mobileapp D / EGL_emulation:eglMakeCurrent:0xae454660:ver 3 1(tinfo 0xae46a6b0)   com.mobileapp D / OkHttp:-> END GET   com.mobileapp D / OkHttp:-> GET http://192.168.15.216:8080/analista/sincronizacion?date=2000-02-01T21%3A14%3A57 http / 1.1   com.mobileapp D / OkHttp:接受:application / json   com.mobileapp D / OkHttp:授权:Bearer 1234Gasd34554.21       主机:192.168.15.216:8080       连接:保持活动   com.mobileapp D / OkHttp:接受编码:gzip       用户代理:okhttp / 3.10.0   com.mobileapp D / OkHttp:-> END GET

     

com.mobileapp D / OkHttp:<-200 OK http://192.168.15.216:8080/analista/sincronizacion?date=2000-02-01T21%3A14%3A57(883毫秒)       伺服器:Apache-Coyote / 1.1       X-Content-Type-Options:nosniff       X-XSS-Protection:1;模式=阻止   com.mobileapp D / OkHttp:缓存控制:无缓存,无存储,max-age = 0,必须重新验证       语法:无缓存       过期:0       X应用程序上下文:sniim:dev:8080       内容类型:application / json; charset = UTF-8       传输编码:分块       日期:2018年7月18日星期三21:15:23 GMT   07-18 21:15:23.538 3096-3405 /? W / audio_hw_generic:没有向HAL提供足够的数据,预期位置为33531398,仅写入了33395042   07-18 21:15:43.130 29617-31676 / android.process.media D / DownloadManager:[3]开始   07-18 21:15:58.059 3365-3379 / system_process I / ActivityManager:等待了足够长的时间:ServiceRecord {653b062 u0 com.android.providers.downloads / .DownloadService}   07-18 21:16:08.328 1262-1295 /? D / hwcomposer:hw_composer在60秒钟内发送了2642个同步   07-18 21:16:53.320 3938-3949 / com.android.phone I / art:释放了背景部分并发标记清除GC 11302(724KB)AllocSpace对象,5(80KB)LOS对象,42%可用空间,1400KB / 2MB,暂停6.152ms共27.107ms   07-18 21:17:08.336 1262-1295 /? D / hwcomposer:hw_composer在60秒钟内发送了3152个同步   07-18 21:18:01.841 29617-31676 / android.process.media W / DownloadManager:[3]停止状态为HTTP_DATA_ERROR的请求:读取响应失败:java.net.SocketTimeoutException:超时   07-18 21:18:01.842 29617-31676 / android.process.media D / DownloadManager:[3]完成,状态为WAITING_TO_RETRY   07-18 21:18:08.328 1262-1295 /? D / hwcomposer:hw_composer在60秒内发送了3123个同步信号

该日志之后,有时会传递到下一个日志:

  

日期:2018年7月18日,星期三,格林尼治标准时间   07-18 16:25:56.981 12090-12113 / com.kaiten.samz.sniimappV3 D / OkHttp:{“ diasFestivos”:[{“ id”:1,“ dia”:“ 2000-01-02”},{ “ id”:2,“ dia”:“ 2000-01-08”},{“ id”:3,“ dia”:“ 2000-01-09”},{“ id”:4,“ dia”: “ 2000-01-15”},{“ id”:5,“ dia”:“ 2000-01-16”},   ...
  ...   ...   {“ id”:21061768,“ descripcion”:“ Zacapoaxtla”,“ abrev”:“ Zacapoaxtla”,“ clvAnt”:“ 1768.0”,“ latitud”:null,“ longitud”:null,“ cotiza”:false,“ tipoPunto“:{” id“:2,

     

读取:意外的EOF!

做出ResponseBody以便接收一个字符串(由于需要进行其他处理),因此它在反序列化方面不会有任何问题。

1 个答案:

答案 0 :(得分:0)

尝试将它们添加到您的代码中。

okhttp3.OkHttpClient client = new okhttp3.OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.MINUTES) // Change it as per your requirement
                .readTimeout(5, TimeUnit.MINUTES)// Change it as per your requirement
                .writeTimeout(5, TimeUnit.MINUTES)// Change it as per your requirement
                .build();

在上方设置为要进行升级的客户端。