Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發學習之路--RxAndroid之初體驗

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

編輯:關於Android編程

學了一段時間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 subscriber;
    private Observable 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() {

            @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() {
            @Override
            public void call(Subscriber subscriber) {
                subscriber.onNext(getHello());
                subscriber.onCompleted();
            }
        });
        bindSubscriber();
    }
}
布局文件如下:
<!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%2D%2D%3E-->
<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"></button></textview></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() {
            @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() {
            @Override
            public String call(String s) {
                return s + " by eastmoon";
            }
        }).subscribe(onNextAction);
    }

運行結果後原來字符串加上了by eastmoon了。其實map的功能就是在observable和subscribe之間可以對數據進行操作。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved