Android開発学習の道--RxAndroidの初体験
5266 ワード
しばらくandroidを勉強して、一部のプロジェクトコードを見て、それから基礎を勉強しても退屈だと思って、新しいことを勉強しましょう.javaを勉強している人はRxJavaを聞いたことがあると思います.androidの下にもRxAndroidがあります.
RxJavaの最も核心的な2つのものはObservables(被観察者,イベントソース)とSubscribers(購読者)である.Observablesは一連のイベントを発行し、Subscribersはこれらのイベントを処理する.ここのイベントは、興味のあるもの、タッチイベント、webインタフェース呼び出しから返されるデータなどです.
RxAndroidのgithubについて:https://github.com/ReactiveX/RxAndroid.
新しいemRxAndroid Studioプロジェクトを作成し、build.gradeのdependenciesに追加:
次にRxAndroidを試してみましょう.まず、ここでは前回の注釈を使って、Annotationに関連する4つのファイルをプロジェクトにコピーし、MainActivityコードを作成します.
レイアウトファイルは次のとおりです.
ここでObservableを作成し、文字列を送信し、イベント処理を受信するためにSubscriberを作成し、この2つをバインドします.ボタンを押すと、subscriberはonNextメソッドとonCompletedメソッドを呼び出します.
もちろんここのcreateObservableはjust法で簡略化できます.
効果は上記と同じです.次にsubscriberを簡略化します.
ここでAction 1によって実現され、subscriberしたという感覚は全くなく、次にバインドを修正すると以下のようになる.
効果は同じです.
次に、次のオペレータmapを使用して、次のように変更します.
実行結果後、元の文字列にby eastmoonが追加されました.実はmapの機能はobservableとsubscribeの間でデータを操作できることです.
RxJavaの最も核心的な2つのものはObservables(被観察者,イベントソース)とSubscribers(購読者)である.Observablesは一連のイベントを発行し、Subscribersはこれらのイベントを処理する.ここのイベントは、興味のあるもの、タッチイベント、webインタフェース呼び出しから返されるデータなどです.
RxAndroidのgithubについて:https://github.com/ReactiveX/RxAndroid.
新しいemRxAndroid Studioプロジェクトを作成し、build.gradeのdependenciesに追加:
compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava:1.1.0'
次にRxAndroidを試してみましょう.まず、ここでは前回の注釈を使って、Annotationに関連する4つのファイルをプロジェクトにコピーし、MainActivityコードを作成します.
package com.jared.emrxandroidstudy;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import rx.Observable;
import rx.Subscriber;
@EMLayoutBinder(R.layout.activity_main)
public class MainActivity extends BaseActivity {
private static final String TAG = "MainActivity";
private Subscriber<String> subscriber;
private Observable<String> observable;
@EMViewBinder(R.id.hello)
private TextView mHello;
@EMViewBinder(R.id.test1)
private Button mTest1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
createSubscriber();
}
private void bindSubscriber() {
observable.subscribe(subscriber);
}
private void createSubscriber() {
subscriber = new Subscriber<String>() {
@Override
public void onCompleted() {
Log.d(TAG, "onCompleted");
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(String t) {
Log.d(TAG, "onNext");
mHello.setText(t);
}
};
}
private String getHello() {
return "Hello RxAndroid";
}
private String getHello1() {
return "Hello RxAndroid 1";
}
@EMOnClickBinder({R.id.test1})
public void myOnClick(View view) {
switch (view.getId()) {
case R.id.test1:
createObservable();
break;
default:
break;
}
}
private void createObservable() {
Log.d(TAG, "observable");
observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext(getHello());
subscriber.onCompleted();
}
});
bindSubscriber();
}
}
レイアウトファイルは次のとおりです.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.jared.emrxandroidstudy.MainActivity">
<TextView
android:id="@+id/hello"
android:text="Hello World!"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/test1"
android:text="Test"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="false"/>
</LinearLayout>
ここでObservableを作成し、文字列を送信し、イベント処理を受信するためにSubscriberを作成し、この2つをバインドします.ボタンを押すと、subscriberはonNextメソッドとonCompletedメソッドを呼び出します.
もちろんここのcreateObservableはjust法で簡略化できます.
private void createObservableByJust() {
Log.d(TAG, "createObservable");
observable = Observable.just(getHello());
bindSubscriber();
}
効果は上記と同じです.次にsubscriberを簡略化します.
private void createSubscriberByAction() {
onNextAction = new Action1<String>() {
@Override
public void call(String s) {
mHello.setText(s);
}
};
}
ここでAction 1によって実現され、subscriberしたという感覚は全くなく、次にバインドを修正すると以下のようになる.
private void bindSubscriber() {
//observable.subscribe(subscriber);
observable.subscribe(onNextAction);
}
効果は同じです.
次に、次のオペレータmapを使用して、次のように変更します.
private void createObservableByMap() {
Log.d(TAG, "createObservableByMap");
Observable.just(getHello()).map(new Func1<String, String>() {
@Override
public String call(String s) {
return s + " by eastmoon";
}
}).subscribe(onNextAction);
}
実行結果後、元の文字列にby eastmoonが追加されました.実はmapの機能はobservableとsubscribeの間でデータを操作できることです.