Android開發學習之路--RxAndroid之初體驗

來源:互聯網
上載者:User

標籤:

    學了一段時間android,看了部分的項目代碼,然後想想老是學基礎也夠枯燥乏味的,那麼就來學習學習新東西吧,相信很多學java的都聽說過RxJava,那麼android下也有RxAndroid。

    RxJava最核心的兩個東西是Observables(被觀察者,事件來源)和Subscribers(訂閱者)。Observables發出一系列事件,Subscribers處理這些事件。這裡的事件可以是任何你感興趣的東西,觸摸事件,web介面調用返回的資料等等。

    關於RxAndroid的github:https://github.com/ReactiveX/RxAndroid。

    建立emRxAndroidStudy工程, 然後在build.grade的dependencies裡添加:

    compile 'io.reactivex:rxandroid:1.1.0'    compile 'io.reactivex:rxjava:1.1.0'

    接著我們來試下RxAndroid了, 首先這裡我們還是使用上次的註解的方式,把4個和Annotation相關的檔案拷貝到工程,編寫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,用來接收事件處理,然後把這兩個綁定,按下按鈕後,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);            }        };    }

    這裡通過Action1來實現,完全沒有了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之間可以對資料進行操作。

    

Android開發學習之路--RxAndroid之初體驗

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.