是什么原因导致改装okhttp get请求不调用其onResponse()或onFailure()方法



我正在开发一个需要从服务器下载数据的移动应用程序。它运行得很好,但在对服务器进行了一些更改后,来自Reform的GET请求停止了工作。它成功地发出了请求,有时甚至得到了成功的响应,但它从不调用onResponse((和onFailure((方法,所以应用程序一直挂在那里。

基本上有两种情况:

  1. 请求已正确完成。响应由Okhttp接收并打印内容,但它以一条消息("read:Unexpected EOF!"(结束。之后应用程序停止工作。它不会冻结,也不会抛出任何异常,只是一直在等待
  2. 请求已正确完成。Okhttp收到了响应,但它不打印内容。在那之后,它的行为和以前一样,只是停留在那里等待

这是响应的日志,它只有由okhttp和系统生成的条目。它有时只会以以下日志停止:

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

com.mobileapp D/OkHttp:<--200 OKhttp://192.168.15.216:8080/analista/sincronizacion?date=2000-02-01T21%3A14%3A57(883ms(服务器:Apache Coyote/1.1X-Content-类型选项:nosniffX-XSS-保护:1;mode=块com.mobileapp D/OkHttp:缓存控制:没有缓存,没有存储,最大年龄=0,必须重新验证Pragma:没有缓存过期时间:0X-Application-Context:sniim:dev:8080内容类型:application/json;charset=UTF-8传输编码:分块日期:2018年7月18日星期三21:15:23 GMT07-18 21:15:23.538 3096-3405/?W/audio_hw_generic:未向HAL提供足够的数据,预期位置33531398,仅写入3339504207-18 21:15:43.130 29617-31676/android.prrocess.media D/DownloadManager:[3]正在启动07-18 21:15:58.059 3365-3379/system_process I/ActivityManager:等待的时间足够长:ServiceRecord{653b062 u0 com.android.provider.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.107ms07-18 21:17:08.336 1262-1295/?D/hwcomposer:hw_composer在60秒内发送了3152个同步07-18 21:18:01.841 29617-31676/android.prrocess.media W/下载管理器:[3]请求停止,状态为HTTP_DATA_ERROR:读取响应失败:java.net.SocketTimeoutException:超时07-18 21:18:01.842 29617-31676/android.prrocess.media D/DownloadManager:[3]已完成,状态为WAITING_TO_RETRY07-18 21:18:08.328 1262-1295/?D/hwcomposer:hw_composer在60s 中发送3123个同步

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

日期:2018年7月18日星期三21:25:56 GMT07-18 16:25:56.981 12090-12113/com.kaiten.samz.snimappV3 D/OkHttp:{"diasFestivos":[{"id":1,"dia":"2000-01-02"},{"id":2,"dia:"2000-01-08,…
。。。。。。{"id":21061768,"description":"Zacapoaxtla","abrev":"zacapoaxtl","clvAnt":"1768.0","latitud":null,"longitud":null,"cotiza":false,"tipoPuto":{"id:2,

read:意外的EOF!

ResponseBody是为了接收字符串(由于需要一些其他处理(,所以它在反序列化方面不应该有任何问题。

尝试在代码中添加这些。

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();

将以上设置为客户进行改造。

最新更新