すばやく理解する「Room x RxJava 」

いい記事があったので。

Room 🔗 RxJava – Google Developers – Medium

まずは、Room で Dao.


@Query(“SELECT * FROM Users WHERE id = :userId”)
User getUserById(String userId);

ここまでで問題なのは、

1. 同期呼び出しでブロッキング。
2. データ変更時に再度呼び出す必要がある。

ということで、RxJava を使いたくなります。

Room は RxJava2.x に対応しています。

Adding Components to your Project | Android Developers

どのように使うのか?

Maybe


@Query(“SELECT * FROM Users WHERE id = :userId”)
Maybe<User> getUserById(String userId);

1. 該当ユーザがなければ、何も返さずに complete。
2. 該当ユーザがあれば、onSuccess となり complete。
3. Maybe が complete されたあとにユーザー情報が更新されても何もしない。

Single


@Query(“SELECT * FROM Users WHERE id = :userId”)
Single<User> getUserById(String userId);

1. 該当ユーザがなければ、何も返さず onError(EmptyResultException)。
2. 該当ユーザがあれば、onSuccess。
3. Single が complete されたあとにユーザー情報が更新されても何もしない。

Flowable


@Query(“SELECT * FROM Users WHERE id = :userId”)
Flowable<User> getUserById(String userId);

1. 該当ユーザはなければ、何も返さず emit もされない。当然、onNext も onError も呼ばれない。
2. ユーザが存在すれば、onNext。
3. ユーザ情報が更新されるたびに、自動で emit されるので、UI上を最新データに更新させることが可能になる。

 

まとめ

これだけ数行でデータベース、非同期処理を簡潔明快に説明できる Room x RxJava の組み合わせ。

おまけに Observable から細分化された RxJava2.x の主役たちの使い方も理解することができます。

素晴らしいですよね。


Google Play Services 11.2.2 で OSSライセンス一覧 を表示する

Including Open Source Notices  |  Google APIs for Android  |  Google Developers

build.gradle に追記します.

root-level:


buildscript {
  repositories {
    //...
    maven { url "https://maven.google.com" } // or google() for Gradle 4+
  }
  dependencies {
    //...
    // Add this line:
    classpath 'com.google.gms:oss-licenses:0.9.0'
   }

app-level:


apply plugin: 'com.google.gms.oss.licenses.plugin'

compile 'com.google.android.gms:play-services-oss-licenses:11.2.2'

コードに追加する行は一行.
アクティビティが用意されています.


startActivity(new Intent(this, OssLicensesMenuActivity.class));

あれ, URLだけしか表示されないけど.

This will display a list of open source libraries that are compiled into the app, whether part of Google Play services or not. Tapping the library name will display the URL of the license.

いいのか...

Show Open Source Notices [65533155] - Visible to Public - Issue Tracker

一応, スターをつけてマークしておきますか...


公式「Guide to App Architecture」のサンプルコードに Retrofit が登場している件

きっと開発者は見たくなる

公式が言うところの「おすすめのアーキテクチャ」.

Guide to App Architecture | Android Developers

眺めているとこんなコードが..


public interface Webservice {
    /**
     * @GET declares an HTTP GET request
     * @Path("user") annotation on the userId parameter marks it as a
     * replacement for the {user} placeholder in the @GET path
     */
    @GET("/users/{user}")
    Call<User> getUser(@Path("user") String userId);
}

ん?

Retrofit だ.

Retrofit

サードパーティであるSquare産の通信ライブラリを公式のサンプルコードに利用している.

Volley じゃないんだ!?

interface を見せながらの構成説明が明快に伝わりやすいとしても.

今どきガチガチ社内でサードパーティライブラリ利用の話が進めやすくなっていく方も多いのではと想像.