ListenableFuturePagingSource
Kotlin
|Java
abstract class ListenableFuturePagingSource<Key : Any, Value : Any> : PagingSource<Key, Value>
kotlin.Any | ||
↳ | androidx.paging.PagingSource<Key, Value> | |
↳ | androidx.paging.ListenableFuturePagingSource |
ListenableFuture-based compatibility wrapper around PagingSource's suspending APIs.
class MyListenableFuturePagingSource( val myBackend: GuavaBackendService, val searchTerm: String ) : ListenableFuturePagingSource<String, Item>() { override fun loadFuture( params: LoadParams<String> ): ListenableFuture<LoadResult<String, Item>> { return myBackend .searchUsers( searchTerm = searchTerm, pageKey = params.key ) .transform<LoadResult<String, Item>>( { response -> LoadResult.Page( data = response!!.items, prevKey = response.prev, nextKey = response.next ) }, networkExecutor ) // Retrofit calls that return the body type throw either IOException for // network failures, or HttpException for any non-2xx HTTP status codes. // This code reports all errors to the UI, but you can inspect/wrap the // exceptions to provide more context. .catching( IOException::class.java, { t: IOException? -> LoadResult.Error(t!!) }, networkExecutor ) .catching( HttpException::class.java, { t: HttpException? -> LoadResult.Error(t!!) }, networkExecutor ) } override fun getRefreshKey(state: PagingState<String, Item>): String? { return state.anchorPosition?.let { state.closestItemToPosition(it)?.id } } }
Summary
Public constructors | |
---|---|
<init>() ListenableFuture-based compatibility wrapper around PagingSource's suspending APIs. |
Public methods | |
---|---|
open suspend PagingSource.LoadResult<Key, Value> |
load(params: PagingSource.LoadParams<Key>) Loading API for PagingSource. |
abstract ListenableFuture<PagingSource.LoadResult<Key, Value>> |
loadFuture(params: PagingSource.LoadParams<Key>) Loading API for PagingSource. |
Inherited functions | |
---|---|
Inherited properties | |
---|---|
Public constructors
<init>
ListenableFuturePagingSource()
ListenableFuture-based compatibility wrapper around PagingSource's suspending APIs.
class MyListenableFuturePagingSource( val myBackend: GuavaBackendService, val searchTerm: String ) : ListenableFuturePagingSource<String, Item>() { override fun loadFuture( params: LoadParams<String> ): ListenableFuture<LoadResult<String, Item>> { return myBackend .searchUsers( searchTerm = searchTerm, pageKey = params.key ) .transform<LoadResult<String, Item>>( { response -> LoadResult.Page( data = response!!.items, prevKey = response.prev, nextKey = response.next ) }, networkExecutor ) // Retrofit calls that return the body type throw either IOException for // network failures, or HttpException for any non-2xx HTTP status codes. // This code reports all errors to the UI, but you can inspect/wrap the // exceptions to provide more context. .catching( IOException::class.java, { t: IOException? -> LoadResult.Error(t!!) }, networkExecutor ) .catching( HttpException::class.java, { t: HttpException? -> LoadResult.Error(t!!) }, networkExecutor ) } override fun getRefreshKey(state: PagingState<String, Item>): String? { return state.anchorPosition?.let { state.closestItemToPosition(it)?.id } } }
Public methods
load
open suspend fun load(params: PagingSource.LoadParams<Key>): PagingSource.LoadResult<Key, Value>