【问题标题】:Retrofit 2 GET/POST doesn't work for large data in AndroidRetrofit 2 GET/POST 不适用于 Android 中的大数据
【发布时间】:2018-10-21 09:05:21
【问题描述】:

我已经看到了这个问题的其他线程,但无法得到任何正确的答案。

@POST("task/GetAllTasks")
Call<MyTask> getMyTasks(@Header("Authorization") String token, @Query("EmployeeId") String emp);

这就是我的调用方式,起初我认为这是由于 GET 请求数据限制,因为 GET 施加了数据限制,然后我将请求从 GET 更改为 POST,但问题仍然存在。

ApiUtils.getTaskService().getMyTasks(apiToken, employeeId).enqueue(new Callback<MyTask>() {
@Override
        public void onResponse(Call<MyTask> call, Response<MyTask> response) {
   // ... Successful code goes here
 }

@Override
        public void onFailure(Call<MyTask> call, Throwable t) {
        //.. This block of code executing now :(
  }
 }

总是调用onFailure。我在 Postman 上测试了同样的请求,它正在返回数据。内容长度为 内容长度 →45720

它确实适用于少量数据,因为我已经在数据量较小的 Dev 数据库上对其进行了测试,但在 Live 环境中它会不断导致问题。

请提出解决方案,还是我应该为此离开 Retrofit 并转向原生 Android 库?

编辑:我们可以在 Retrofit 中增加请求超时吗,如果可以,那么如何?

【问题讨论】:

  • 发布完整的堆栈跟踪老兄。如果没有堆栈跟踪,很难猜出发生了什么
  • 面临这个异常java.net.SocketTimeoutException: timeout

标签: android post get retrofit retrofit2


【解决方案1】:

尝试增加你的超时时间:

OkHttpClient client = new OkHttpClient().newBuilder()
                  .readTimeout(10, TimeUnit.SECONDS)
                  .connectTimeout(10, TimeUnit.SECONDS).build();

并将其设置为您的改造:

new Retrofit.Builder().baseUrl("xxx").client(client).build().create(xxx.class);

【讨论】:

  • 是的,你是对的,增加超时可以解决问题。
  • Damm....我正在实现分页库,因此第一次使用改造,我不知道这一点。在过去的 2 小时里,我一直在寻找每一个可能的错误和调试,最后才知道由于超时时间短,这一切都在发生。该死的
  • @SambitMallick 最好应用分页,因为增加超时意味着您的用户必须等待几秒钟才能获取数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 2017-01-25
  • 2013-04-28
  • 2020-05-26
  • 1970-01-01
  • 2017-05-30
相关资源
最近更新 更多