前一篇文章简单地写了Observable、Observer、Subcriber及subcribe()方法的使用。这篇再往下学习一些基础的知识点。内容也不会长。
我们知道。
Observable<String> mObservable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
}
});
create()方法创建一个Observable()对象,而RxJava中还有just()和from()方法可以直到同样的作用。
just()的作用也是创建Observable对象,如下:
Observable<String> testJust = Observable.just("Hello","How are you?","yes,i\'m fine,thank you!");
它的效果等同于
final Observable<String> mObservable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello");
subscriber.onNext("How are you?");
subscriber.onNext("Yes,i\'m fine,thank you!");
subscriber.onCompleted();
}
});
注意的是,查看源码中,just()中参数的个数最长到10个
Observable<String> testFrom = Observable.from(new String[]{"Hello","How are you?","yes,i\'m fine,thank you!"});
又如:
List<String> lists = new ArrayList<>();
lists.add("Hello");
lists.add("How are you?");
lists.add("yes,i'm fine,thank you!");
Observable<String> testFrom1 = Observable.from(lists);
from()支持从数组或者是实现了Iterator接口的集合中接收参数,效果等同于上面的just()例子和create()方法。
写看看源码。
public final static <T> Observable<T> just(T t1, T t2) {
return from(Arrays.asList(t1, t2));
}
当just参数在2个以上时,实际上内部调用的也是from(T[] array)方法。
好了,接下面的一part
上一篇已经简单进行了演示,当创建好一个Observable和一个Subcriber时,可以通过
mObservable.subscribe(mTestSubscriber);
绑定两者,而subscribe()方法调用时,绑定在Observable对象mObservable中的OnSubscriber对象的onCall()方法就会处理,在onCall()方法中,mTestSubscriber可以调用onNext()或者onError()或者onCompleted()来完成整个事件链条。
但RxJava还提供其他的形式。比如Action
先看api
public final Subscription subscribe(final Action1<? super T> onNext);
public final Subscription subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError);
public final Subscription subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError, final Action0 onComplete);
subscribe()可以传入Action1或者Action0的参数。
先看Action1和Action0的源码。
/** * A one-argument action. */
public interface Action1<T> extends Action {
void call(T t);
}
/** * A zero-argument action. */
public interface Action0 extends Action {
void call();
}
注释写得很清楚,Action1代表一个参数action,Action0代表0个参数的Action.
那好,这里查看public final Subscription subscribe(final Action1
public final Subscription subscribe(final Action1<? super T> onNext) {
if (onNext == null) {
throw new IllegalArgumentException("onNext can not be null");
}
return subscribe(new Subscriber<T>() {
@Override
public final void onCompleted() {
// do nothing
}
@Override
public final void onError(Throwable e) {
throw new OnErrorNotImplementedException(e);
}
@Override
public final void onNext(T args) {
onNext.call(args);
}
});
}
显而易见,这个方法中内部创建了一个subscriber对象,当onNext触发时,调用传入的Action1的对象的onCall方法。
其它的两个方法,也是如此,这里不再做分析。
总之,如果只关心onNext()事件,或者需要将onNext(),onError()或者onCompleted()由不同的对象处理,就可以考虑用Action的方式实现subscribe订阅。
Action1<String> testAction = new Action1<String>() {
@Override
public void call(String s) {
Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();
}
};
mObservable.subscribe(testAction);
这相当于创建一个Subscriber对象,然后调用onNext()方法。
好了,这篇文章内容就到这里。
回顾下:我们学习了基本的Observable和Subscriber的创建,订阅。
也学会了它们其它形式如Just(),from(),Action()方式的实现。
虽然例子看起来没有什么用,但是这只是demo,一步一步来,后面有更多的知识点。