- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个连续调用loadAfter的PageKeyedDataSource,所有的项目都多次添加到Recyclerview中。从 API 方面来看,一个空 lastEvaluatedKey
意味着给我第一页,这对于为什么它一直调用以获取第一页但 A 有点道理。如果没有更多数据要获取,它不应该停止(又名 params.key == null
吗?和 B.适配器中的 COMPARATOR
不应该不允许多次添加相同的项目吗?我错过了什么?
PageKeyedDataSource.kt
class ReservationsPageKeyedDataSource(private val retryExecutor: Executor) : PageKeyedDataSource<String, Reservation?>() {
private var retry: (() -> Any)? = null
val initialLoad = MutableLiveData<PagingNetworkState>()
fun retryAllFailed() {
val prevRetry = retry
retry = null
prevRetry?.let {
retryExecutor.execute {
it.invoke()
}
}
}
override fun loadInitial(
params: LoadInitialParams<String>,
callback: LoadInitialCallback<String, Reservation?>
) {
val request = Api.reservationsService.getReservations(dateType = RERVATIONS_DATE_TYPE.future, last = null)
initialLoad.postValue(PagingNetworkState.LOADING)
// triggered by a refresh, execute in sync
try {
val response = request.execute()
val originalData = response.body()?.result?.reservations
val data = mutableListOf<Reservation>()
// some data munipulation
retry = null
initialLoad.postValue(PagingNetworkState.LOADED)
callback.onResult(
data.toList(),
null,
response.body()?.result?.lastEvaluatedKey.toString()
)
} catch (ioException: IOException) {
retry = {
loadInitial(params, callback)
}
val error = PagingNetworkState.error(ioException.message ?: "unknown error")
initialLoad.postValue(error)
}
}
override fun loadBefore(
params: LoadParams<String>,
callback: LoadCallback<String, Reservation?>
) {
// no-op
}
override fun loadAfter(
params: LoadParams<String>,
callback: LoadCallback<String, Reservation?>
) {
// I tried adding an if statement here to check if the params.key is null or not but that didn't help
Api.reservationsService.getReservations(dateType = RERVATIONS_DATE_TYPE.future, last = params.key)
.enqueue(object : Callback<ReservationListResponse> {
override fun onFailure(call: Call<ReservationListResponse>, t: Throwable) {
retry = { loadAfter(params, callback) }
}
override fun onResponse(
call: Call<ReservationListResponse>,
response: Response<ReservationListResponse>
) {
if (response.isSuccessful) {
val data = response.body()?.result?.reservations
retry = null
callback.onResult(
data.orEmpty(),
response.body()?.result?.lastEvaluatedKey.toString()
)
} else {
retry = { loadAfter(params, callback) }
}
}
})
}
}
companion object {
val COMPARATOR = object : DiffUtil.ItemCallback<Reservation>() {
override fun areContentsTheSame(oldItem: Reservation, newItem: Reservation): Boolean =
oldItem == newItem
override fun areItemsTheSame(oldItem: Reservation, newItem: Reservation): Boolean =
oldItem.id == newItem.id
}
}
最佳答案
另一个可能的原因是,如果您在 ScrollView 内部使用 Recycleview,loadAfter 将被无限调用,直到数据完成。
Recycleview 会自动处理滚动,所以不要在 scrollView 中使用它。
关于kotlin - PageKeyedDataSource loadAfter 连续调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58735434/
我正在使用 PageKeyedDataSource通过调用 API 和使用 Retrofit 进行分页。 我正在使用 Dagger 2 进行依赖注入(inject)。 @Provides Reposi
我有一个连续调用loadAfter的PageKeyedDataSource,所有的项目都多次添加到Recyclerview中。从 API 方面来看,一个空 lastEvaluatedKey 意味着给我
在我的 fragment 中,我集成了 android jetpack 分页库和数据源,我使用 PageKeyedDataSource 和改造 API 回调。 代码异常运行并将数据加载到 recycl
根据文档,在 UI 线程中创建 PagedList 期间调用 loadInitial 以提供一些占位符,直到获取实际数据以避免向用户显示空列表。 有什么方法可以跳过 loadInitial 或返回空列
我在我的项目中使用 android 架构组件。所以我使用分页库进行分页,在我的情况下,我需要 PageKeyedDataSource,但我无法将加载的数据返回到 UI, 代码是 数据源工厂.kt cl
我是一名优秀的程序员,十分优秀!