/*
* 1 概念: Rxjava 基于观察者的 异步 事件库
* 2 rx的观察者模式 Observer/Subscripter 观察者,
* Observable 被观察者
* subscribe 订阅 (被观察者订阅 观察者 通过调用此函数)
*
* 3 对象的创建 :
*
* 创建观察者 new 接口Observer 或者Subscripter 两者有差异(新增了几个方法)
* // 接口中必须实现的三个方法
* onnext 普通事件 相当于 onClick(按钮接口回调事件中案例)
* onCom。。。 onnenxt不仅是一个事件 还是个事件队列 ,队列完成后 触发此方法
* onErr。。。 事件处理异常时触发 (成功失败只能触发一个)
*
* 注意 观察者的范型要与被观察者创建时参数类型一致
* */
package com.example.zhangbiao.rxjava;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.ImageView;
import java.io.File;
import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "1234";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
* 1 概念: Rxjava 基于观察者的 异步 事件库
* 2 rx的观察者模式 Observer/Subscripter 观察者,
* Observable 被观察者
* subscribe 订阅 (被观察者订阅 观察者 通过调用此函数)
*
* 3 对象的创建 :
*
* 创建观察者 new 接口Observer 或者Subscripter 两者有差异(新增了几个方法)
* // 接口中必须实现的三个方法
* onnext 普通事件 相当于 onClick(按钮接口回调事件中案例)
* onCom。。。 onnenxt不仅是一个事件 还是个事件队列 ,队列完成后 触发此方法
* onErr。。。 事件处理异常时触发 (成功失败只能触发一个)
*
* 注意 观察者的范型要与被观察者创建时参数类型一致
*
* 观察者:他什么时候触发事件 触发什么样的事件由 他的静态方法 create()创建
* 看其参数 new Observable.OnSubscribe<String>() OnSubscribe表示在订阅时 也就是下文的
* observable.subscribe(subscriber); 时
*
* */
Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onStart() {
Log.i(TAG, "onStart: " + "初始化工作");
}
@Override
public void onCompleted() {
Log.i(TAG, "onCompleted: " + "事件完成!");
}
@Override
public void onError(Throwable throwable) {
Log.i(TAG, "onError: " + "事件异常");
}
@Override
public void onNext(String s) {
Log.i(TAG, "onNext: 接收到动作" + s);
}
};
// oncreate是rxjava 最基本创建事件队列的方法 rxjava还提供了快捷创建的方法
// 1 Observable observable1 = Observable.just("hello","world"); // 将传入的可变参数依次发出来
// 2 Observable.from(new String[]{"hello","world"}); // 内部将传入的数组或者Iterable 转化为对象输出
//1 2 的方式与3结果相同
// 将会依次调用:
// onNext("Hello");
// onNext("world");
// onCompleted();
// 3 基本方式
Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
// 被观察者内部有观察者的 对象subscriber 可以调用观察者的方法
// 思路类比 点击事件
// 被观察者发出动作 观察者便可以接收到
// 基于事件的调度 类比点击事件 执行一次 观察者内部方法触发一次
subscriber.onNext("hello");
subscriber.onNext("world");
}
});
// 被观察者订阅观察者事件(此句话可能有点不易理解 你会感觉反过来说通顺)
observable.subscribe(subscriber);
}
}
log:
08-13 17:41:23.465 5781-5781/com.example.zhangbiao.rxjava I/1234:
onStart: 初始化工作
onNext: 接收到动作hello
onNext: 接收到动作world
总结: // 被观察者执行步骤 观察者观察接收结果
网友评论