RxJava - IntelliJ IDEA で RxJava の環境構築
実際に RxJava のサンプルコードを書いていく上での環境を構築していきます。今回はエディタとして IntelliJ IDEA を用います。
動作確認環境
- OS: macOS High Sierra 10.13.6
- IntelliJ IDEA: 2018.2.1 (Ultimate Edition) Build #IU-182.3911.36
- JRE: 1.8.0_152-release-1248-b8 x86_64
- JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
環境構築
今回導入する RxJava のバージョンは記事執筆時点で最新の 2.2.0 です。
Release 2.2.0 · ReactiveX/RxJava · GitHub
IntelliJ IDEA で新たにプロジェクトを作成する
- 起動後の
Welcome to IntelliJ IDEA
画面にて、+ Create New Project
を選択
- サイドメニューから
Gradle
を選び、Next
で次へ
Project SDK
について聞かれた場合は IntelliJ IDEA 側でよしなにやってくれていると思いますので、そのとおり進めてくださいGroupId
,ArtifactId
,Version
について- https://improve-future.com/what-are-groupid-artifactid.html でわかりやすく説明されています
GroupId
はプロジェクトを一意に識別できるものでcom.example.azuuun.rxjava
といったフォーマットで入力ArtifactId
は任意のプロジェクト名RxJavaPlayground
といったものを入力Version
はデフォルトでよいと思います
- 次の画面の
module
の設定画面はデフォルトで進めて問題ないです - ProjectName などは先程設定した
ArtifactId
がデフォルトで設定されていますが、適当に名前を入力します
Gradle でライブラリを適用する
- プロジェクトが作成された後、
build.gradle
ファイルを開きます dependencies
にcompile 'io.reactivex.rxjava2:rxjava:2.2.0'
を追記- ファイル右上に
Enabled Auto-Import
といった表示があればクリックします - 正常に導入されるかを確認
サンプルコードを書いてみる
HelloRxJava
というファイルを作成し、以下のコードを書いて実行してみましょう。
import io.reactivex.*; import io.reactivex.schedulers.Schedulers; import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; public class HelloRxJava { public static void main(String[] args) throws Exception { Flowable<String> flowable = Flowable.create(new FlowableOnSubscribe<String>() { @Override public void subscribe(FlowableEmitter<String> emitter) throws Exception { String[] datas = { "Hello, RxJava", "こんにちは、RxJava" }; for (String data : datas) { if (emitter.isCancelled()) { return; } // データを通知する emitter.onNext(data); } // 完了したことを通知する emitter.onComplete(); } }, BackpressureStrategy.BUFFER); flowable.observeOn(Schedulers.computation()) .subscribe(new Subscriber<String>() { private Subscription subscription; // 購読を開始したときの処理 @Override public void onSubscribe(Subscription s) { // Subscription を Subscriber 内で保持 this.subscription = s; // 受け取るデータ数の要求 this.subscription.request(1L); } // 通知を受け取ったときの処理 @Override public void onNext(String data) { String threadName = Thread.currentThread().getName(); System.out.println(String.format("%s: %s", threadName, data)); // 次に受け取るデータのリクエスト this.subscription.request(1L); } // エラー通知を受け取ったときの処理 @Override public void onError(Throwable t) { t.printStackTrace(); } // 完了通知を受け取ったときの処理 @Override public void onComplete() { String threadName = Thread.currentThread().getName(); System.out.println(String.format("%s: 完了しました", threadName)); } }); Thread.sleep(500L); } }
以下のような出力が出れば、環境は正常に構築できています。
RxComputationThreadPool-1: Hello, RxJava RxComputationThreadPool-1: こんにちは、RxJava RxComputationThreadPool-1: 完了しました
以上です。
次の記事
参考
RxJavaリアクティブプログラミング (CodeZine BOOKS)
- 作者: 須田智之
- 出版社/メーカー: 翔泳社
- 発売日: 2017/02/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る