【发布时间】: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 个项目,那么您在后续调用中使用了错误的itemNum或numPage值。 -
不,我调试了调用,page 和 itemNum 的数量是正确的,但是如果你想看我添加调用的其余代码。
-
Retrofit 不会对结果进行任何堆叠。如果没有更多上下文,将很难回答这个问题。
-
您确定问题不在 API 方面吗?使用 Postman 或 Curl 得到相同的结果吗?
-
我复制了问题中的更多细节。如果你能看到更多,请告诉我。
标签: android kotlin retrofit2 kotlin-coroutines