{% setvar book_path %}/reference/kotlin/androidx/_book.yaml{% endsetvar %} {% include "_shared/_reference-head-tags.html" %}

RxPagingSource

abstract class RxPagingSource<Key : Any, Value : Any> : PagingSource

kotlin.Any
   ↳ androidx.paging.PagingSource
     ↳ androidx.paging.rxjava2.RxPagingSource

Rx-based compatibility wrapper around PagingSource's suspending APIs.

import androidx.paging.PagingState
import androidx.paging.rxjava2.RxPagingSource

/**
 * Sample RxPagingSource which loads `Item`s from network requests via Retrofit to a backend
 * service, which uses String tokens to load pages (each response has a next/previous token).
 */
class MyPagingSource(
    val myBackend: RxBackendService,
    val searchTerm: String
) : RxPagingSource<String, Item>() {
    override fun loadSingle(params: LoadParams<String>): Single<LoadResult<String, Item>> {
        return myBackend
            // Single-based network load
            .searchUsers(searchTerm, params.key)
            .subscribeOn(Schedulers.io())
            .map<LoadResult<String, Item>> { result ->
                LoadResult.Page(
                    data = result.items,
                    prevKey = result.prev,
                    nextKey = result.next
                )
            }
            .onErrorReturn { e ->
                when (e) {
                    // 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.
                    is IOException -> LoadResult.Error(e)
                    is HttpException -> LoadResult.Error(e)
                    else -> throw e
                }
            }
    }

    override fun getRefreshKey(state: PagingState<String, Item>): String? {
        return state.anchorPosition?.let { state.closestItemToPosition(it)?.id }
    }
}

Summary

Public constructors

<Key : Any, Value : Any> RxPagingSource()

Public functions

final suspend PagingSource.LoadResult<Key, Value>

Loading API for PagingSource.

abstract Single<PagingSource.LoadResult<Key, Value>>

Loading API for PagingSource.

Inherited functions

From androidx.paging.PagingSource
abstract Key?
getRefreshKey(state: PagingState<Key, Value>)

Provide a Key used for the initial load for the next PagingSource due to invalidation of this PagingSource.

Unit

Signal the PagingSource to stop loading.

Unit
registerInvalidatedCallback(onInvalidatedCallback: () -> Unit)

Add a callback to invoke when the PagingSource is first invalidated.

Unit
unregisterInvalidatedCallback(onInvalidatedCallback: () -> Unit)

Remove a previously added invalidate callback.

Inherited properties

From androidx.paging.PagingSource
Boolean

Whether this PagingSource has been invalidated, which should happen when the data this PagingSource represents changes since it was first instantiated.

open Boolean

true if this PagingSource supports jumping, false otherwise.

open Boolean

true if this PagingSource expects to re-use keys to load distinct pages without a call to invalidate, false otherwise.

Public constructors

RxPagingSource

<Key : Any, Value : Any> RxPagingSource()

Public functions

load

final suspend fun load(params: PagingSource.LoadParams<Key>): PagingSource.LoadResult<Key, Value>

Loading API for PagingSource.

Implement this method to trigger your async load (e.g. from database or network).

loadSingle

abstract fun loadSingle(params: PagingSource.LoadParams<Key>): Single<PagingSource.LoadResult<Key, Value>>

Loading API for PagingSource.

Implement this method to trigger your async load (e.g. from database or network).