RxJava
是一个实现异步操作的库
为什么同样是做异步,为什么人们用它,而不用现成的 AsyncTask、Handler... ... ?
一个词:简洁。
异步操作很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。 Android 创造的 AsyncTask
和Handler
,其实都是为了让异步代码更加简洁。RxJava 的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。
本文就简单介绍RXjava的几种简单用法及其请求网络的小Demo
需要配置:
compile 'io.reactivex:rxandroid:0.24.0'
compile 'io.reactivex:rxjava:1.0.9'
创建一个订阅者:
class MySubscriber extends Subscriber<String>{
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
//接收到的消息
@Override
public void onNext(String s) {
Toast.makeText(MainActivity.this, "..."+s, Toast.LENGTH_SHORT).show();
}
}
第一:实现简单的发送消息的功能
//创建订阅者对象
MySubscriber mySubscriber=new MySubscriber();
//第一种创建被观察者 有两种方式
Observable observable=Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
//执行主要逻辑,发送消息到“订阅者”的onNext方法中,“订阅者”已经在上面创建
subscriber.onNext("今天是练习RXjava的用法....");
}
});
//第二种创建被观察者
Observable<String> observable1=Observable.just("今天是练习R");
//订阅消息
observable1.subscribe(mySubscriber);
第二:合并发送消息
List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
list1.add("1");
list1.add("2");
list1.add("3");
list2.add("a");
list2.add("b");
list2.add("c");
Observable observable1=Observable.from(list1);
Observable observable2=Observable.from(list2);
Observable observable=Observable.merge(observable1,observable2);
observable.subscribe(new Action1() {
@Override
public void call(Object o) {
Toast.makeText(MainActivity.this, ".."+o.toString(), Toast.LENGTH_SHORT).show();
}
});
//输出的结果为1 2 3 a b c
第三:压缩发送消息
List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
list1.add("1");
list1.add("2");
list1.add("3");
list2.add("a");
list2.add("b");
list2.add("c");
Observable observable1 = Observable.from(list1);
Observable observable2 = Observable.from(list2);
Observable observable = Observable.zip(observable1, observable2, new Func2<String, String, String>() {
@Override
public String call(String s, String s2) {
return s + "---" + s2;
}
});
observable.subscribe(new Action1() {
@Override
public void call(Object o) {
Toast.makeText(MainActivity.this, o.toString(), Toast.LENGTH_SHORT).show();
}
});
第四:请求网络的小Demo
//订阅者
MySubscriber mySubscriber = new MySubscriber();
//创建一个被观察者 doInbackgroud
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
/**
* 子线程
* @param subscriber
*/
@Override
public void call(final Subscriber<? super String> subscriber) {
RequestParams params=new RequestParams("https://www.baidu.com");
//执行请求网络的操作
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String s) {
//发送到“订阅者”的onNext方法
subscriber.onNext(s);
}
@Override
public void onError(Throwable throwable, boolean b) {
}
@Override
public void onCancelled(CancelledException e) {
}
@Override
public void onFinished() {
}
});
}
});
//指定我的逻辑在子线程中执行
observable.subscribeOn(Schedulers.io());
//执行观察者在主线程
observable.observeOn(AndroidSchedulers.mainThread());
//指定被订阅
observable.subscribe(mySubscriber);
好了,本文就介绍到这里,,,,,以后继续....