blob: d2c9b5f119709366c76f72bb318426f73b822a9f [file] [log] [blame]
Alex Saveaue60da312020-09-09 23:34:43 +00001<html devsite="true">
2 <head>
3 <title>ListenableFuturePagingSource</title>
4{% setvar book_path %}/reference/androidx/_book.yaml{% endsetvar %}
5{% include "_shared/_reference-head-tags.html" %}
6 </head>
7 <body>
8 <h1>ListenableFuturePagingSource</h1>
Andrea Falcone4be8b872020-10-15 12:34:30 -04009 <p>
Owen Gray06d5dc82021-04-09 10:39:50 -040010 <pre>public abstract class ListenableFuturePagingSource&lt;Key&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>,&nbsp;Value&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; extends <a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></pre>
Andrea Falcone4be8b872020-10-15 12:34:30 -040011 </p>
Alex Saveau47daf612020-09-23 20:36:41 +000012 <div class="devsite-table-wrapper">
13 <table class="jd-inheritance-table">
14 <tbody>
15 <tr>
Owen Gray7fcd36c2022-07-12 17:25:02 -040016 <td colspan="3"><a href="https://developer.android.com/reference/java/lang/Object.html">java.lang.Object</a></td>
Alex Saveau47daf612020-09-23 20:36:41 +000017 </tr>
18 <tr>
19 <td class="jd-inheritance-space">&nbsp;&nbsp;&nbsp;↳</td>
Owen Gray7fcd36c2022-07-12 17:25:02 -040020 <td colspan="2"><a href="/reference/androidx/paging/PagingSource.html">androidx.paging.PagingSource</a></td>
Alex Saveau47daf612020-09-23 20:36:41 +000021 </tr>
22 <tr>
23 <td>&nbsp;</td>
24 <td class="jd-inheritance-space">&nbsp;&nbsp;&nbsp;↳</td>
Owen Gray7fcd36c2022-07-12 17:25:02 -040025 <td colspan="1"><a href="/reference/androidx/paging/ListenableFuturePagingSource.html">androidx.paging.ListenableFuturePagingSource</a></td>
Alex Saveau47daf612020-09-23 20:36:41 +000026 </tr>
27 </tbody>
28 </table>
29 </div>
Alex Saveaue60da312020-09-09 23:34:43 +000030 <hr>
Paweł Marks4724d6f2021-12-22 17:11:51 +010031 <p><code><a href="https://guava.dev/releases/18.0/api/docs/package-list/com/google/common/util/concurrent/ListenableFuture.html">ListenableFuture</a></code>-based compatibility wrapper around <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code>'s suspending APIs.</p>
Owen Grayeb256132021-01-27 13:49:50 -050032 <pre class="prettyprint">class MyListenableFuturePagingSource(
33 val myBackend: GuavaBackendService,
34 val searchTerm: String
35) : ListenableFuturePagingSource&lt;String, Item&gt;() {
36 override fun loadFuture(
37 params: LoadParams&lt;String&gt;
38 ): ListenableFuture&lt;LoadResult&lt;String, Item&gt;&gt; {
39 return myBackend
40 .searchUsers(
41 searchTerm = searchTerm,
42 pageKey = params.key
43 )
44 .transform&lt;LoadResult&lt;String, Item&gt;&gt;(
45 { response -&gt;
46 LoadResult.Page(
47 data = response!!.items,
48 prevKey = response.prev,
49 nextKey = response.next
50 )
51 },
52 networkExecutor
53 )
54 // Retrofit calls that return the body type throw either IOException for
55 // network failures, or HttpException for any non-2xx HTTP status codes.
56 // This code reports all errors to the UI, but you can inspect/wrap the
57 // exceptions to provide more context.
58 .catching(
59 IOException::class.java,
60 { t: IOException? -&gt; LoadResult.Error(t!!) },
61 networkExecutor
62 )
63 .catching(
64 HttpException::class.java,
65 { t: HttpException? -&gt; LoadResult.Error(t!!) },
66 networkExecutor
67 )
68 }
69
70 override fun getRefreshKey(state: PagingState&lt;String, Item&gt;): String? {
71 return state.anchorPosition?.let { state.closestItemToPosition(it)?.id }
72 }
73}</pre>
Alex Saveaue60da312020-09-09 23:34:43 +000074 <h2>Summary</h2>
Alex Saveaue60da312020-09-09 23:34:43 +000075 <div class="devsite-table-wrapper">
76 <table class="responsive">
77 <thead>
78 <tr>
Andrea Falcone80f1a8f2022-08-23 11:22:33 -040079 <th colspan="100%"><h3>Public constructors</h3></th>
Alex Saveauf393e9a2020-09-17 21:15:59 +000080 </tr>
81 </thead>
Andrea Falcone80f1a8f2022-08-23 11:22:33 -040082 <tbody class="list">
Alex Saveauf393e9a2020-09-17 21:15:59 +000083 <tr>
84 <td>
Owen Gray06d5dc82021-04-09 10:39:50 -040085 <div><code>&lt;Key&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>,&nbsp;Value&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/paging/ListenableFuturePagingSource.html#ListenableFuturePagingSource()">ListenableFuturePagingSource</a>()</code></div>
Alex Saveauf393e9a2020-09-17 21:15:59 +000086 </td>
87 </tr>
88 </tbody>
89 </table>
90 </div>
91 <div class="devsite-table-wrapper">
92 <table class="responsive">
93 <thead>
94 <tr>
Andrea Falcone80f1a8f2022-08-23 11:22:33 -040095 <th colspan="100%"><h3>Public methods</h3></th>
Alex Saveaue60da312020-09-09 23:34:43 +000096 </tr>
97 </thead>
Andrea Falcone80f1a8f2022-08-23 11:22:33 -040098 <tbody class="list">
Alex Saveaue60da312020-09-09 23:34:43 +000099 <tr>
Fred Sladkey98a15022021-06-10 17:46:16 +0000100 <td width="40%"><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/paging/PagingSource.LoadResult.html">PagingSource.LoadResult</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Key,&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Value&gt;</code></td>
Andrea Falconed77cf9d2021-04-26 17:34:56 -0400101 <td>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100102 <div><code><a href="/reference/androidx/paging/ListenableFuturePagingSource.html#load(androidx.paging.PagingSource.LoadParams)">load</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/paging/PagingSource.LoadParams.html">PagingSource.LoadParams</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Key&gt;&nbsp;params)</code></div>
Alex Saveaufe9fe472020-09-10 01:41:31 +0000103 <p>Loading API for <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code>.</p>
Alex Saveaue60da312020-09-09 23:34:43 +0000104 </td>
105 </tr>
106 <tr>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100107 <td width="40%"><code>abstract @<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://guava.dev/releases/18.0/api/docs/package-list/com/google/common/util/concurrent/ListenableFuture.html">ListenableFuture</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/paging/PagingSource.LoadResult.html">PagingSource.LoadResult</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Key,&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Value&gt;&gt;</code></td>
Andrea Falconed77cf9d2021-04-26 17:34:56 -0400108 <td>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100109 <div><code><a href="/reference/androidx/paging/ListenableFuturePagingSource.html#loadFuture(androidx.paging.PagingSource.LoadParams)">loadFuture</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/paging/PagingSource.LoadParams.html">PagingSource.LoadParams</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Key&gt;&nbsp;params)</code></div>
Alex Saveaufe9fe472020-09-10 01:41:31 +0000110 <p>Loading API for <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code>.</p>
Alex Saveaue60da312020-09-09 23:34:43 +0000111 </td>
112 </tr>
113 </tbody>
114 </table>
115 </div>
Andrea Falcone5e016c72020-10-28 16:45:13 -0400116 <div class="devsite-table-wrapper">
117 <table class="responsive" id="inhmethods">
118 <thead>
119 <tr>
Owen Gray125ac3d2022-10-24 09:55:44 -0400120 <th colspan="100%"><h3>Inherited fields</h3></th>
121 </tr>
122 </thead>
123 <tbody class="list">
124 <tr>
125 <td><devsite-expandable><span class="expand-control">From <a href="/reference/androidx/paging/PagingSource.html">androidx.paging.PagingSource</a></span>
126 <div class="devsite-table-wrapper">
127 <table class="responsive">
128 <tbody class="list">
129 <tr>
130 <td width="40%"><code>final boolean</code></td>
131 <td>
132 <div><code><a href="/reference/androidx/paging/PagingSource.html#invalid()">invalid</a></code></div>
133 <p>Whether this <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code> has been invalidated, which should happen when the data this <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code> represents changes since it was first instantiated.</p>
134 </td>
135 </tr>
136 <tr>
137 <td width="40%"><code>boolean</code></td>
138 <td>
139 <div><code><a href="/reference/androidx/paging/PagingSource.html#jumpingSupported()">jumpingSupported</a></code></div>
140 <p><code>true</code> if this <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code> supports jumping, <code>false</code> otherwise.</p>
141 </td>
142 </tr>
143 <tr>
144 <td width="40%"><code>boolean</code></td>
145 <td>
146 <div><code><a href="/reference/androidx/paging/PagingSource.html#keyReuseSupported()">keyReuseSupported</a></code></div>
147 <p><code>true</code> if this <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code> expects to re-use keys to load distinct pages without a call to <code><a href="/reference/androidx/paging/PagingSource.html#invalidate()">invalidate</a></code>, <code>false</code> otherwise.</p>
148 </td>
149 </tr>
150 </tbody>
151 </table>
152 </div>
153</devsite-expandable> </td>
154 </tr>
155 </tbody>
156 </table>
157 </div>
158 <div class="devsite-table-wrapper">
159 <table class="responsive" id="inhmethods">
160 <thead>
161 <tr>
Andrea Falcone80f1a8f2022-08-23 11:22:33 -0400162 <th colspan="100%"><h3>Inherited methods</h3></th>
Andrea Falcone5e016c72020-10-28 16:45:13 -0400163 </tr>
164 </thead>
Andrea Falcone80f1a8f2022-08-23 11:22:33 -0400165 <tbody class="list">
Andrea Falcone5e016c72020-10-28 16:45:13 -0400166 <tr>
Owen Graybbefee12022-09-14 08:09:05 -0400167 <td><devsite-expandable><span class="expand-control">From <a href="/reference/androidx/paging/PagingSource.html">androidx.paging.PagingSource</a></span>
Andrea Falcone5e016c72020-10-28 16:45:13 -0400168 <div class="devsite-table-wrapper">
169 <table class="responsive">
Andrea Falcone80f1a8f2022-08-23 11:22:33 -0400170 <tbody class="list">
Andrea Falcone5e016c72020-10-28 16:45:13 -0400171 <tr>
Owen Grayb31b2462021-08-24 14:38:24 -0400172 <td width="40%"><code>abstract Key</code></td>
Andrea Falconed77cf9d2021-04-26 17:34:56 -0400173 <td>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100174 <div><code><a href="/reference/androidx/paging/PagingSource.html#getRefreshKey(androidx.paging.PagingState)">getRefreshKey</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/paging/PagingState.html">PagingState</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Key,&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Value&gt;&nbsp;state)</code></div>
Owen Gray327bd5c2021-03-23 10:21:18 -0400175 <p>Provide a <code><a href="/reference/androidx/paging/PagingSource.html">Key</a></code> used for the initial <code><a href="/reference/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">load</a></code> for the next <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code> due to invalidation of this <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code>.</p>
Andrea Falcone5e016c72020-10-28 16:45:13 -0400176 </td>
177 </tr>
178 <tr>
Owen Graya018e672021-05-20 14:59:56 -0400179 <td width="40%"><code>final void</code></td>
Andrea Falconed77cf9d2021-04-26 17:34:56 -0400180 <td>
Andrea Falcone5e016c72020-10-28 16:45:13 -0400181 <div><code><a href="/reference/androidx/paging/PagingSource.html#invalidate()">invalidate</a>()</code></div>
182 <p>Signal the <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code> to stop loading.</p>
183 </td>
184 </tr>
185 <tr>
Owen Graya018e672021-05-20 14:59:56 -0400186 <td width="40%"><code>final void</code></td>
Andrea Falconed77cf9d2021-04-26 17:34:56 -0400187 <td>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100188 <div><code><a href="/reference/androidx/paging/PagingSource.html#registerInvalidatedCallback(kotlin.Function0)">registerInvalidatedCallback</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Function0&lt;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>&gt;&nbsp;onInvalidatedCallback<br>)</code></div>
Andrea Falcone5e016c72020-10-28 16:45:13 -0400189 <p>Add a callback to invoke when the <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code> is first invalidated.</p>
190 </td>
191 </tr>
192 <tr>
Owen Graya018e672021-05-20 14:59:56 -0400193 <td width="40%"><code>final void</code></td>
Andrea Falconed77cf9d2021-04-26 17:34:56 -0400194 <td>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100195 <div><code><a href="/reference/androidx/paging/PagingSource.html#unregisterInvalidatedCallback(kotlin.Function0)">unregisterInvalidatedCallback</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Function0&lt;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>&gt;&nbsp;onInvalidatedCallback<br>)</code></div>
Andrea Falcone5e016c72020-10-28 16:45:13 -0400196 <p>Remove a previously added invalidate callback.</p>
197 </td>
198 </tr>
199 </tbody>
200 </table>
201 </div>
202</devsite-expandable> </td>
203 </tr>
204 </tbody>
205 </table>
206 </div>
Alex Saveauf393e9a2020-09-17 21:15:59 +0000207 <h2>Public constructors</h2>
Fred Sladkey86625e32021-05-24 19:28:27 -0400208 <div><a name="ListenableFuturePagingSource--"></a><a name="listenablefuturepagingsource"></a>
Alex Saveauf393e9a2020-09-17 21:15:59 +0000209 <h3 class="api-name" id="ListenableFuturePagingSource()">ListenableFuturePagingSource</h3>
Owen Grayb1af0122022-10-10 11:23:18 -0400210 <pre class="api-signature no-pretty-print">public&nbsp;&lt;Key&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>,&nbsp;Value&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/paging/ListenableFuturePagingSource.html#ListenableFuturePagingSource()">ListenableFuturePagingSource</a>()</pre>
Alex Saveauf393e9a2020-09-17 21:15:59 +0000211 </div>
Alex Saveaue60da312020-09-09 23:34:43 +0000212 <h2>Public methods</h2>
Fred Sladkey86625e32021-05-24 19:28:27 -0400213 <div><a name="load-androidx.paging.PagingSource.LoadParams-"></a><a name="load"></a>
Alex Saveaue60da312020-09-09 23:34:43 +0000214 <h3 class="api-name" id="load(androidx.paging.PagingSource.LoadParams)">load</h3>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100215 <pre class="api-signature no-pretty-print">public&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/paging/PagingSource.LoadResult.html">PagingSource.LoadResult</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Key,&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Value&gt;&nbsp;<a href="/reference/androidx/paging/ListenableFuturePagingSource.html#load(androidx.paging.PagingSource.LoadParams)">load</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/paging/PagingSource.LoadParams.html">PagingSource.LoadParams</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Key&gt;&nbsp;params)</pre>
Alex Saveaufe9fe472020-09-10 01:41:31 +0000216 <p>Loading API for <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code>.</p>
217 <p>Implement this method to trigger your async load (e.g. from database or network).</p>
Alex Saveaue60da312020-09-09 23:34:43 +0000218 </div>
Fred Sladkey86625e32021-05-24 19:28:27 -0400219 <div><a name="loadFuture-androidx.paging.PagingSource.LoadParams-"></a><a name="loadfuture"></a>
Alex Saveaue60da312020-09-09 23:34:43 +0000220 <h3 class="api-name" id="loadFuture(androidx.paging.PagingSource.LoadParams)">loadFuture</h3>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100221 <pre class="api-signature no-pretty-print">public&nbsp;abstract&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://guava.dev/releases/18.0/api/docs/package-list/com/google/common/util/concurrent/ListenableFuture.html">ListenableFuture</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/paging/PagingSource.LoadResult.html">PagingSource.LoadResult</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Key,&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Value&gt;&gt;&nbsp;<a href="/reference/androidx/paging/ListenableFuturePagingSource.html#loadFuture(androidx.paging.PagingSource.LoadParams)">loadFuture</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/paging/PagingSource.LoadParams.html">PagingSource.LoadParams</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> Key&gt;&nbsp;params)</pre>
Alex Saveaufe9fe472020-09-10 01:41:31 +0000222 <p>Loading API for <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code>.</p>
223 <p>Implement this method to trigger your async load (e.g. from database or network).</p>
Alex Saveaue60da312020-09-09 23:34:43 +0000224 </div>
225 </body>
226</html>