RxJva初学第一篇

我是一个小白,落伍的小白,现在才开始RxJava!

/**
 * Rxjava原理是订阅发布模式:
 * 通过subscribe()方法把Observable(被观察者)和Observer(观察者/Subscriber)实现订阅关系
 */
public class RxJavaActivity extends AppCompatActivity implements View.OnClickListener {
    private TextView rxjava_tv;
    private static final String TAG = "LDM";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rx_java);
        rxjava_tv = (TextView) findViewById(R.id.rxjava_tv);
        findViewById(R.id.rxjava_btn).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.rxjava_btn:
                //RxJava使用基本步骤
                //第一步:创建Observable
                Observable<String> observable = createObservable;
                //第二步:创建Observer
                Observer<String> observer = createObserver;
                //通过subcribe实现订阅关系
                observable.subscribe(observer);
                //或者使用另外一种写法
//                otherStyle();
                break;
        }
    }

    /**
     * Observable可以发送任意数量的消息(包括空消息),当消息被成功处理或者出错时,流程结束。 Observable会调用它的每个Subscriber的Subscriber.onNext()函数,并最终以Subscriber.onComplete()或者Subscriber.onError()结束。
     */
    private Observable<String> createObservable = Observable.create(new ObservableOnSubscribe<String>() {
        /**
         * ObservableEmitter: Emitter是发射器的意思,它可以发出三种类型的事件:
         * 通过调用emitter的onNext(T value)、onComplete()和onError(Throwable error)就可以分别发出:
         * next事件、complete事件和error事件。
         * @param e
         * @throws Exception
         */
        @Override
        public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
            //执行onNext()方法,Observer中对应执行onNext()方法
            e.onNext("我的第一次RxJava学习");
            e.onComplete();
        }
    });
    private Observer<String> createObserver = new Observer<String>() {
        @Override
        public void onSubscribe(@NonNull Disposable d) {
            Log.e(TAG, "onSubscribe: ");
        }

        @Override
        public void onNext(@NonNull String s) {
            Log.e(TAG, "onNext:");
            rxjava_tv.append(s);
            rxjava_tv.append("\n");
        }

        @Override
        public void onError(@NonNull Throwable e) {
            Log.e(TAG, "onError: ");
        }

        @Override
        public void onComplete() {
            Log.e(TAG, "onComplete: ");
        }
    };

    /**
     * @description 换一种写法实现整个流程
     * @author ldm
     * @time 2017/4/27 11:36
     */
    private void otherStyle() {
        Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
                e.onNext("链式写法学习RxJava");
                e.onNext("再调用一次onNext");
            }
        }).subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {

            }

            @Override
            public void onNext(@NonNull String s) {
                rxjava_tv.append(s);
                rxjava_tv.append("\n");
            }

            @Override
            public void onError(@NonNull Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值