【发布时间】:2020-02-18 13:01:14
【问题描述】:
我被困在一个简单的任务上,我很确定我走错了路。 我只需要获取项目列表。我只能按 50 获取项目,我不知道确切的页数。
所以我需要做的是拨打电话并重复它,直到我得到少于 50 个项目(这意味着它是最后一页),然后返回完整的列表并在 db 中插入
api调用是单的,我需要返回单。 API调用:
@GET("posts")
fun getItems(@Query("page") page: Int, @Query("per_page") perPage: Int): Single<List<Item>>
这是我目前得到的:
fun getItems(): Single<List<Item>> {
var result = listOf<Item>()
return Observable.range(1, Integer.MAX_VALUE).concatMapSingle { page ->
remoteDataSource.getItems(page, 50).map {
result = it
it
}
}.repeatUntil {
result.size != 50
}.single(emptyList()).map {
localDataSource.insertItems(it)
it
}
}
问题是获取第二页时出现错误: java.lang.IllegalArgumentException:序列包含多个元素!
当我到达最后一页时,如何将每个调用附加到列表并发出该列表? 例如,我应该将 single 更改为 flowable 吗?
【问题讨论】:
-
也发布您的 api 调用代码?你在使用 mvvm 模式吗?
-
是的,我正在使用 mvvm 模式!调用是在存储库中进行的