Rxjava的创建
1.创建操作 create
创建操作 observable
Observable observable = Observable.create(new Observable.OnSubscribe() {
@Override
public void call(Subscriber super String> subscriber) {
if (!subscriber.isUnsubscribed()) {
subscriber.onNext("aaaaa");
subscriber.onNext(onDownLoad());
subscriber.onNext("bbbbb");
subscriber.onNext("ccccc");
}
});
创建操作 subscriber
Subscriber subscriber = new Subscriber() {
@Override
public void onCompleted() {
Log.i(TAG, "onCompleted");
}
@Override
public void onError(Throwable e) {
Log.i(TAG, "onError");
}
@Override
public void onNext(String s) {
Log.i(TAG, s.toString());
}
};```
观察者订阅被观察者
observable.subscribe(subscriber);
简写
Observable.create(new Observable.OnSubscribe
@Override
public void call(Subscriber super Integer> subscriber) {
if (!subscriber.isUnsubscribed()) {
for (int i = 0; i < 10; i++) {
subscriber.onNext(i);
}
subscriber.onCompleted();
}
}
}).subscribe(new Subscriber
@Override
public void onCompleted() {
Log.i(TAG, "onCompleted");
}
@Override
public void onError(Throwable e) {
Log.i(TAG, e.getMessage());
}
@Override
public void onNext(Integer integer) {
Log.i(TAG, "result-->>" + integer);
}
});
//我们其实并不关心OnComplete和OnError,我们只需要在onNext的时候做一些处理,这时候就可以使用Action1类。
Observable.just("Hello, world!")
.subscribe(new Action1
@Override
public void call(String s) {
System.out.println(s);
}
});
###2.创建from操作
将其他的类对象和数据类型转换为Observable,例如 iterable可以看成是同步的
Observable。通过显式将那些数据转化为Observables,你可以像使用Observable一样与他们交互
Observable
observable.subscribe(new Action1
@Override
public void call(Integer integer) {
}
}, new Action1() {
@Override
public void call(Throwable throwable) {
}
}, new Action0() {
@Override
public void call() {
}
});
###3.创建interval操作
创建一个按固定时间间隔发射的Observable
Observable.interval(5, 10, TimeUnit.SECONDS).subscribe(new Action1
@Override
public void call(Long aLong) {
Log.i(TAG, aLong.toString());
}
});
initialDelay 5 : 延迟5S
period 10: 每隔10S
###4.创建just操作
Just将单个的数据转化为要发射的那个数据Observable,just类似from,但是from会将数组或iterable当单个数据
Observable.just(new Integer[]{1, 2, 3, 4, 5, 6}, new Integer[]{3, 5, 6, 8, 3, 8}).subscribe(new Action1
@Override
public void call(Integer[] integers) {
for (int i = 0; i < integers.length; i++) {
Log.i(TAG, "next:" + integers[i]);
}
}
});
Log 123456 356838
##Rxjava的变换操作
###1.变换map操作
就是用来把把一个事件转换为另一个事件的。
Observable.just("Hello, world!")
.map(new Func1
@Override
public String call(String s) {
return s + " -Dan";
}
})
.subscribe(s -> System.out.println(s));
比如上面的例子中,subscriber并不关心返回的字符串,而是想要字符串的hash值
Observable.just("Hello, world!")
.map(new Func1
@Override
public Integer call(String s) {
return s.hashCode();
}
})
.subscribe(i -> System.out.println(Integer.toString(i)));