All Your Baseの日記

モバイルアプリを開発しています。

【Android】RxAndroidを導入する

f:id:ayb:20171001160559j:plain

今更感が拭えないですが、RxAndroidの導入方法をメモしておきます。

github.com

app/build.gradleにRxAndroidとRxJavaを追加して、Syncします。

dependencies {

    //中略

    compile 'io.reactivex.rxjava2:rxandroid:2.0.1' //追加
    compile 'io.reactivex.rxjava2:rxjava:2.1.3' //追加
}

これでとりあえず導入はできるんですが、ラムダ式を書くと怒られてダルいです。

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Observable.just("one", "two", "three", "four", "five")
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(result -> Log.i("result", result));
    }
}

通常はRetrolambdaを導入するものと思います。

www.allyourbase.jp

今回は「Set language level to 8」ってやればRetrolambdaを導入しなくてもOKでした(Android Studio 3.0 Canary 8で確認)。

f:id:ayb:20171001155611p:plain

app/build.gradleのcompileOptionsに勝手に追加されています。PATHにJava 8が通っていないといけないはず。

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}