blob: 5176e6f77385e2f34f0514d8ff0d6abeec8f902a [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>
Tiem Song6f896de2022-11-03 14:55:52 -07008 <div id="metadata-info-block"></div>
Alex Saveaue60da312020-09-09 23:34:43 +00009 <h1>ListenableFuturePagingSource</h1>
Andrea Falcone4be8b872020-10-15 12:34:30 -040010 <p>
Owen Gray22f20572022-08-08 13:48:02 -040011 <pre>public abstract class <a href="/reference/androidx/paging/ListenableFuturePagingSource.html">ListenableFuturePagingSource</a>&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 -040012 </p>
Alex Saveau47daf612020-09-23 20:36:41 +000013 <div class="devsite-table-wrapper">
14 <table class="jd-inheritance-table">
15 <tbody>
16 <tr>
Owen Gray7fcd36c2022-07-12 17:25:02 -040017 <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 +000018 </tr>
19 <tr>
20 <td class="jd-inheritance-space">&nbsp;&nbsp;&nbsp;↳</td>
Owen Gray7fcd36c2022-07-12 17:25:02 -040021 <td colspan="2"><a href="/reference/androidx/paging/PagingSource.html">androidx.paging.PagingSource</a></td>
Alex Saveau47daf612020-09-23 20:36:41 +000022 </tr>
23 <tr>
24 <td>&nbsp;</td>
25 <td class="jd-inheritance-space">&nbsp;&nbsp;&nbsp;↳</td>
Owen Gray7fcd36c2022-07-12 17:25:02 -040026 <td colspan="1"><a href="/reference/androidx/paging/ListenableFuturePagingSource.html">androidx.paging.ListenableFuturePagingSource</a></td>
Alex Saveau47daf612020-09-23 20:36:41 +000027 </tr>
28 </tbody>
29 </table>
30 </div>
Alex Saveaue60da312020-09-09 23:34:43 +000031 <hr>
Paweł Marks4724d6f2021-12-22 17:11:51 +010032 <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 -050033 <pre class="prettyprint">class MyListenableFuturePagingSource(
34 val myBackend: GuavaBackendService,
35 val searchTerm: String
36) : ListenableFuturePagingSource&lt;String, Item&gt;() {
37 override fun loadFuture(
38 params: LoadParams&lt;String&gt;
39 ): ListenableFuture&lt;LoadResult&lt;String, Item&gt;&gt; {
40 return myBackend
41 .searchUsers(
42 searchTerm = searchTerm,
43 pageKey = params.key
44 )
45 .transform&lt;LoadResult&lt;String, Item&gt;&gt;(
46 { response -&gt;
47 LoadResult.Page(
48 data = response!!.items,
49 prevKey = response.prev,
50 nextKey = response.next
51 )
52 },
53 networkExecutor
54 )
55 // Retrofit calls that return the body type throw either IOException for
56 // network failures, or HttpException for any non-2xx HTTP status codes.
57 // This code reports all errors to the UI, but you can inspect/wrap the
58 // exceptions to provide more context.
59 .catching(
60 IOException::class.java,
61 { t: IOException? -&gt; LoadResult.Error(t!!) },
62 networkExecutor
63 )
64 .catching(
65 HttpException::class.java,
66 { t: HttpException? -&gt; LoadResult.Error(t!!) },
67 networkExecutor
68 )
69 }
70
71 override fun getRefreshKey(state: PagingState&lt;String, Item&gt;): String? {
72 return state.anchorPosition?.let { state.closestItemToPosition(it)?.id }
73 }
74}</pre>
Alex Saveaue60da312020-09-09 23:34:43 +000075 <h2>Summary</h2>
Alex Saveaue60da312020-09-09 23:34:43 +000076 <div class="devsite-table-wrapper">
77 <table class="responsive">
78 <thead>
79 <tr>
Andrea Falcone80f1a8f2022-08-23 11:22:33 -040080 <th colspan="100%"><h3>Public constructors</h3></th>
Alex Saveauf393e9a2020-09-17 21:15:59 +000081 </tr>
82 </thead>
Andrea Falcone80f1a8f2022-08-23 11:22:33 -040083 <tbody class="list">
Alex Saveauf393e9a2020-09-17 21:15:59 +000084 <tr>
85 <td>
Owen Gray06d5dc82021-04-09 10:39:50 -040086 <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 +000087 </td>
88 </tr>
89 </tbody>
90 </table>
91 </div>
92 <div class="devsite-table-wrapper">
93 <table class="responsive">
94 <thead>
95 <tr>
Andrea Falcone80f1a8f2022-08-23 11:22:33 -040096 <th colspan="100%"><h3>Public methods</h3></th>
Alex Saveaue60da312020-09-09 23:34:43 +000097 </tr>
98 </thead>
Andrea Falcone80f1a8f2022-08-23 11:22:33 -040099 <tbody class="list">
Alex Saveaue60da312020-09-09 23:34:43 +0000100 <tr>
Fred Sladkey98a15022021-06-10 17:46:16 +0000101 <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 -0400102 <td>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100103 <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 +0000104 <p>Loading API for <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code>.</p>
Alex Saveaue60da312020-09-09 23:34:43 +0000105 </td>
106 </tr>
107 <tr>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100108 <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 -0400109 <td>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100110 <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 +0000111 <p>Loading API for <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code>.</p>
Alex Saveaue60da312020-09-09 23:34:43 +0000112 </td>
113 </tr>
114 </tbody>
115 </table>
116 </div>
Andrea Falcone5e016c72020-10-28 16:45:13 -0400117 <div class="devsite-table-wrapper">
118 <table class="responsive" id="inhmethods">
119 <thead>
120 <tr>
Owen Gray125ac3d2022-10-24 09:55:44 -0400121 <th colspan="100%"><h3>Inherited fields</h3></th>
122 </tr>
123 </thead>
124 <tbody class="list">
125 <tr>
126 <td><devsite-expandable><span class="expand-control">From <a href="/reference/androidx/paging/PagingSource.html">androidx.paging.PagingSource</a></span>
127 <div class="devsite-table-wrapper">
128 <table class="responsive">
129 <tbody class="list">
130 <tr>
131 <td width="40%"><code>final boolean</code></td>
132 <td>
133 <div><code><a href="/reference/androidx/paging/PagingSource.html#invalid()">invalid</a></code></div>
134 <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>
135 </td>
136 </tr>
137 <tr>
138 <td width="40%"><code>boolean</code></td>
139 <td>
140 <div><code><a href="/reference/androidx/paging/PagingSource.html#jumpingSupported()">jumpingSupported</a></code></div>
141 <p><code>true</code> if this <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code> supports jumping, <code>false</code> otherwise.</p>
142 </td>
143 </tr>
144 <tr>
145 <td width="40%"><code>boolean</code></td>
146 <td>
147 <div><code><a href="/reference/androidx/paging/PagingSource.html#keyReuseSupported()">keyReuseSupported</a></code></div>
148 <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>
149 </td>
150 </tr>
151 </tbody>
152 </table>
153 </div>
154</devsite-expandable> </td>
155 </tr>
156 </tbody>
157 </table>
158 </div>
159 <div class="devsite-table-wrapper">
160 <table class="responsive" id="inhmethods">
161 <thead>
162 <tr>
Andrea Falcone80f1a8f2022-08-23 11:22:33 -0400163 <th colspan="100%"><h3>Inherited methods</h3></th>
Andrea Falcone5e016c72020-10-28 16:45:13 -0400164 </tr>
165 </thead>
Andrea Falcone80f1a8f2022-08-23 11:22:33 -0400166 <tbody class="list">
Andrea Falcone5e016c72020-10-28 16:45:13 -0400167 <tr>
Owen Graybbefee12022-09-14 08:09:05 -0400168 <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 -0400169 <div class="devsite-table-wrapper">
170 <table class="responsive">
Andrea Falcone80f1a8f2022-08-23 11:22:33 -0400171 <tbody class="list">
Andrea Falcone5e016c72020-10-28 16:45:13 -0400172 <tr>
Owen Grayb31b2462021-08-24 14:38:24 -0400173 <td width="40%"><code>abstract Key</code></td>
Andrea Falconed77cf9d2021-04-26 17:34:56 -0400174 <td>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100175 <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 -0400176 <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 -0400177 </td>
178 </tr>
179 <tr>
Owen Graya018e672021-05-20 14:59:56 -0400180 <td width="40%"><code>final void</code></td>
Andrea Falconed77cf9d2021-04-26 17:34:56 -0400181 <td>
Andrea Falcone5e016c72020-10-28 16:45:13 -0400182 <div><code><a href="/reference/androidx/paging/PagingSource.html#invalidate()">invalidate</a>()</code></div>
183 <p>Signal the <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code> to stop loading.</p>
184 </td>
185 </tr>
186 <tr>
Owen Graya018e672021-05-20 14:59:56 -0400187 <td width="40%"><code>final void</code></td>
Andrea Falconed77cf9d2021-04-26 17:34:56 -0400188 <td>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100189 <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 -0400190 <p>Add a callback to invoke when the <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code> is first invalidated.</p>
191 </td>
192 </tr>
193 <tr>
Owen Graya018e672021-05-20 14:59:56 -0400194 <td width="40%"><code>final void</code></td>
Andrea Falconed77cf9d2021-04-26 17:34:56 -0400195 <td>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100196 <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 -0400197 <p>Remove a previously added invalidate callback.</p>
198 </td>
199 </tr>
200 </tbody>
201 </table>
202 </div>
203</devsite-expandable> </td>
204 </tr>
205 </tbody>
206 </table>
207 </div>
Alex Saveauf393e9a2020-09-17 21:15:59 +0000208 <h2>Public constructors</h2>
Fred Sladkey86625e32021-05-24 19:28:27 -0400209 <div><a name="ListenableFuturePagingSource--"></a><a name="listenablefuturepagingsource"></a>
Alex Saveauf393e9a2020-09-17 21:15:59 +0000210 <h3 class="api-name" id="ListenableFuturePagingSource()">ListenableFuturePagingSource</h3>
Owen Grayb1af0122022-10-10 11:23:18 -0400211 <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 +0000212 </div>
Alex Saveaue60da312020-09-09 23:34:43 +0000213 <h2>Public methods</h2>
Fred Sladkey86625e32021-05-24 19:28:27 -0400214 <div><a name="load-androidx.paging.PagingSource.LoadParams-"></a><a name="load"></a>
Alex Saveaue60da312020-09-09 23:34:43 +0000215 <h3 class="api-name" id="load(androidx.paging.PagingSource.LoadParams)">load</h3>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100216 <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 +0000217 <p>Loading API for <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code>.</p>
218 <p>Implement this method to trigger your async load (e.g. from database or network).</p>
Alex Saveaue60da312020-09-09 23:34:43 +0000219 </div>
Fred Sladkey86625e32021-05-24 19:28:27 -0400220 <div><a name="loadFuture-androidx.paging.PagingSource.LoadParams-"></a><a name="loadfuture"></a>
Alex Saveaue60da312020-09-09 23:34:43 +0000221 <h3 class="api-name" id="loadFuture(androidx.paging.PagingSource.LoadParams)">loadFuture</h3>
Paweł Marks4724d6f2021-12-22 17:11:51 +0100222 <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 +0000223 <p>Loading API for <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code>.</p>
224 <p>Implement this method to trigger your async load (e.g. from database or network).</p>
Alex Saveaue60da312020-09-09 23:34:43 +0000225 </div>
226 </body>
227</html>