レトロフィットを使用してアプリを構築しています。すべて問題なく動作していますが、API リクエストのサイズが心配で、ページネーションを使用して分割したいと考えています。
利用可能なすべてのデータがデフォルトでダウンロードされるように、Retrofit を使用して API を自動的にページングするための最良の戦略は何でしょうか?
レトロフィットを使用してアプリを構築しています。すべて問題なく動作していますが、API リクエストのサイズが心配で、ページネーションを使用して分割したいと考えています。
利用可能なすべてのデータがデフォルトでダウンロードされるように、Retrofit を使用して API を自動的にページングするための最良の戦略は何でしょうか?
まず、使用しているバックエンド サービスでページネーションがサポートされている必要があります。次に、レトロフィットを使用してクライアント側からこれを実装する方法の例を探している場合は、@JakeWharton のu2020プロジェクトを参照することをお勧めします。GalleryService レトロフィット インターフェイスは、このようなメカニズムを非常に簡単な方法で実装します。インターフェイス自体へのリンクは次のとおりです。
u2020 プロジェクトに基づくライトの例を次に示します。
// See how it uses a pagination index.
public interface GalleryService {
@GET("/gallery/{page}") //
Gallery listGallery(@Path("page") int page);
}
残りのサービスから既にダウンロードされたアイテムの合計量と事前に定義されたページあたりのアイテムの最大数を追跡することにより、次にダウンロードする一連のアイテムについて残りのサービスを呼び出すために必要なページ インデックスを計算できます。
次に、このように残りの API を呼び出すことができます。
int nextPage = totalItemsAlreadyDownloaded / ITEMS_PER_PAGE + 1;
restApi.listGallery(nextPage);
これは u2020 プロジェクトに基づく非常に軽い例ですが、うまくいけば、これを攻撃する方法のアイデアが得られます。