今はまだ必要な Android ライブラリ の Bill of Materials(BOM) のURLs

以下は、Androidアプリ開発には、必ず使いますよね。

いや使うと良い、か。

 

Kotlin Libraries Bill of Materials

👉 Maven Repository: org.jetbrains.kotlin » kotlin-bom 

 

Kotlinx Coroutines BOM

👉 Maven Repository: org.jetbrains.kotlinx » kotlinx-coroutines-bom 

 

firebase-bom

👉 Google's Maven Repository - BOM 

 

OkHttp BOM

👉 Maven Repository: com.squareup.okhttp3 » okhttp-bom 

latest の更新に注意するためのな。

👉 bom - Google's Maven Repository 
👉 org.jetbrains - Maven Central Repository Search 


Paging3 ライブラリ

👉 Paging 3 library overview  |  Android デベロッパー  |  Android Developers 

「ページングライブラリ」は、ローカルストレージやネットワーク経由のより大きなデータセットを読み込みページを表示する処理に使います。これを使うことで、ネットワーク帯域幅とシステムのリソースを効果的に使うことができます。Android app architecture にフィットするように設計されており、他の JetPack コンポーネントとも綺麗に統合することができます。

メリット

ページングライブラリには以下の機能があります。

- ページ分けされたデータのメモリーキャッシュ化。システムリソースを効果的に使います、
- 重複リクエストの排除。ネットワーク帯域とシステムリソースを効果的に使います。
- 設定可能な指導リクエスト付き RecyclerView Adapter。ロード済みデータとスクロールを考慮。
- Kotlin coroutine と Flow を最優先。LiveData や RxJava のように利用可能。
- リフレッシュやリトライを含んだエラーハンドリング。

👉 componentid:413106 status:open - Issue Tracker 

設定

build.gradle に以下のようにして dependencies に追加します。


dependencies {
  def paging_version = "3.0.0-alpha01"

  implementation "androidx.paging:paging-runtime:$paging_version"

  // alternatively - without Android dependencies for tests
  testImplementation "androidx.paging:paging-common:$paging_version"

  // optional - RxJava2 support
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  // optional - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"
}

構成

Paging ライブラリは、推奨されている Android app architecture に直接統合できます。ライブラリコンポーネンツはアプリの中で3つのレイヤーを持っています。

- Repository レイヤー
- ViewModel レイヤー
- UI レイヤー

ここでは、Pagingライブラリコンポーネントがそれぞれのレイヤーでどのように組み合わせてく使われ、データ読み込みからページを表示するまでを説明します。

Repository レイヤー

Repository レイヤーで、主要な Pagingライブラリコンポーネントとなるのが PagingSource です。それぞれの PagingSource オブジェクトはデータソースとそれをどう走査するかを定義します。PagingSource オブジェクトは、ネットワークやローカルデータベースなど一つのソースからデータをロードします。

もうひとつは、RemoteMediator です。 これは、ネットワークデータソースとローカルデータキャッシュのようなレイヤー分けされたデータからのページングを管理します。

ViewModel レイヤー

Pager コンポーネントは、PagingSource や PagingConfig オブジェクトから PagingData インスタンスを作成するためのパブリックなAPIを提供します。

ViewModelレイヤーとUIを接続するコンポーネントは、PagingData です。PagingData オブジェクトは、ページ付けされたスナップショットのコンテナです。PagingSourceオブジェクトに問い合わせし、その結果を保持します。

UI レイヤー

UIレイヤーで主要ページングライブラリコンポーネントは、PagingDataAdapterです。RecyclerView のアダプターでページ付けされたデータを取り扱います。

代替として、 独自のカスタムアダプターを作るのに AsyncPagingDataDiffer コンポーネントを使うこともできます。

その他

ページングライブラリについてもっと学ぶために、以下のリソースも参照してください。

👉 Android Paging 
👉 architecture-components-samples/PagingSample at paging3 · android/architecture-components-samples 
👉 architecture-components-samples/PagingWithNetworkSample at paging3 · android/architecture-components-samples 


Retorofit + JSON には「Kotlin Serialization Converter」がよい。

Retrofit は非常に有名なSquare製のJavaで書かれたAndroid 向け HTTP クライアントです。

👉 square/retrofit: Type-safe HTTP client for Android and Java by Square, Inc. 

その内部には Kotlin Serialization はサポートされていませんが、オブジェクトのシリアル化のためのコンバータファクトリを追加することができます。独自のコンバータファクトリを作成することもできますし、Jake Wharton が書いたものを使うこともできます。

👉 JakeWharton/retrofit2-kotlinx-serialization-converter: A Retrofit 2 Converter.Factory for Kotlin serialization. 

Retrofit2 Converter.Factory を利用するには、ライブラリ dependencies に追加したあと、Retorofit インスタンス生成時に、Extension Function である asConvertFactory を使ってそれを追加します。


val contentType = "application/json".toMediaType()

val retrofit = Retrofit.Builder()
 .baseUrl("https://www.example.com")
 .addConverterFactory(Json.asConverterFactory(contentType))
 .build()

簡単ですね!

ちなみに、.toMediaType() とは、


okhttp3.MediaType.Companion.toMediaType

です。

👉 「Kotlinx Json」の登場でサードパーティJSONライブラリは不要となる。