【问题标题】:Unexpected behavior retrofit + coroutines意外行为改造 + 协程
【发布时间】:2021-01-28 02:02:57
【问题描述】:

我有这个服务调用,itemNum 默认为:15。

@GET("curated")
suspend fun getCurated(@Query("per_page") itemNum: Int, @Query("page") numPage: Int): Response<List<Photo>>

这里是调用服务的地方,现在我只检索列表的最后 15 个元素,因为这个问题,但这是一个临时修复。响应结果存储调用的所有元素。

    suspend fun getCuratedFotos(queryString: String?, pageNumber: Int, resetLit:Boolean): OperationResult {

    if (resetLit) {
        listFotos.let { listFotos.clear() }
    }

    val response: Response<List<Foto>> = if (queryString != null) {
        fotosApi.getSearch(queryString, AppConstants.ITEM_NUMBER, pageNumber)
    } else {
        fotosApi.getCurated(AppConstants.ITEM_NUMBER, pageNumber)
    }

    return if (response.isSuccessful) {
        if (response.body().isNullOrEmpty()) {
            OperationResult(false, "Result are empty", null)
        } else {
            response.body()?.let { listFotos.addAll(it.takeLast(AppConstants.ITEM_NUMBER)) }
            OperationResult(true, "", listFotos)
        }
    } else {
        OperationResult(false, "Error in network request", null)
    }
}

这将返回一个包含 15 项列表的响应对象,我面临的问题是在第一次调用服务时返回第 1 页的前 15 项,但在第二次调用中它返回第一个 30 项的列表15 + 15 新。

希望列表仅包含每次通话的 15 项。 以某种方式改造堆叠结果。

这种行为在协程实现时开始,在它按预期工作之前

我只需要当前调用的 15 个元素,有人知道如何实现吗?

我在这里复制调试面板,您可以在其中看到调用参数和结果元素。

【问题讨论】:

  • 你能把你打电话给getCurated的代码贴出来吗?我的怀疑是,如果您第一次调用它时只收到 15 个项目,而下次调用它时只收到 30 个项目,那么您在后续调用中使用了错误的 itemNumnumPage 值。
  • 不,我调试了调用,page 和 itemNum 的数量是正确的,但是如果你想看我添加调用的其余代码。
  • Retrofit 不会对结果进行任何堆叠。如果没有更多上下文,将很难回答这个问题。
  • 您确定问题不在 API 方面吗?使用 Postman 或 Curl 得到相同的结果吗?
  • 我复制了问题中的更多细节。如果你能看到更多,请告诉我。

标签: android kotlin retrofit2 kotlin-coroutines


【解决方案1】:

似乎您正在将新结果添加到列表中已有内容的末尾:

response.body()?.let { listFotos.addAll(it.takeLast(AppConstants.ITEM_NUMBER)) }
OperationResult(true, "", listFotos)

您应该返回一个新列表:

OperationResult(true, "", response.body()?.takeLast(AppConstants.ITEM_NUMBER))

【讨论】:

  • 我列出了改造响应的最后 15 个元素的新列表。这就是问题所在。
猜你喜欢
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 2021-11-11
  • 2014-06-07
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多