RXjava的简单介绍 请求网络的Demo menglong0329

RxJava

是一个实现异步操作的库

 

为什么同样是做异步,为什么人们用它,而不用现成的 AsyncTask、Handler... ... ?

一个词:简洁

异步操作很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。 Android 创造的 AsyncTaskHandler ,其实都是为了让异步代码更加简洁。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);

好了,本文就介绍到这里,,,,,以后继续....

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值