我的 Android 应用程序的一些用户经常遇到网络错误,并显示以下错误消息:"Unexpected end of stream on null".
通过查看其他类似问题,我没有找到任何明确的方法来解决它。我无法重现网络错误。
1)我没有成功地附加Connection=close
到请求标头,正如这个答案所暗示的那样
2)我没有成功添加.retryOnConnectionFailure(true)
,因为这个答案表明
3)我没有成功地搜索到服务器端问题,正如 这个答案所暗示的,但是有网络问题的请求没有出现在 nginx access.log 文件中
这是我如何初始化改造
OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
.connectTimeout(40, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.build();
Retrofit.Builder retrofitBuilder = new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient);
this.retrofit = retrofitBuilder.build();
这是我的端点定义(在 IUserService.java 中)
@POST("/v2/android/login/phone")
@Headers("Content-Type: application/json;charset=UTF-8;Connection=close")
Call<APIResult<Session>> phoneLogin(@Body APIRequest request);
这是查询端点的方式
userService = retrofit.create(IUserService.class);
Call<APIResult<Session>> call = userService.phoneLogin(request);
call.enqueue(new GenericCallback<>(context, callback));
我们的配置:
安卓 (Java)
改造 2.3.0:'com.squareup.retrofit2:retrofit:2.3.0'
好的http 3.12.1:'com.squareup.okhttp3:okhttp:3.12.1'
在 AWS Elastic Beanstalk 上运行的服务器,平台:Puma 与 Ruby 2.6 在 64 位 Amazon Linux/2.9.0 上运行
谁能更好地解释问题出在哪里?知道如何在本地重现此问题吗?有什么办法可以解决这个问题?