RxJava+RxAndroid 初学者一看一敲就懂

本文介绍了RxJava的基本概念和使用方法,通过多个示例演示了如何创建被观察者和观察者,展示了线程调度和常见操作符的应用。适合初学者快速入门。

惯例:先上图后说话,谢谢各位伙伴的支持! 有你们是我的福分!


每日一言:自信的生命最美丽。

使用

1、关联

compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'

compile 'com.trello:rxlifecycle:0.3.1'
compile 'com.trello:rxlifecycle-components:0.3.1'

2、简单示例(一定自己敲一遍)

String tag = "=====>:";

public void test01() {
    Log.e(tag, "------------test01-----------" +
            "\n----------简单实例01---------");

    //创建被观察者
    Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {
            //调用观察者的回调
            subscriber.onNext("我是");
            subscriber.onNext("RxJava");
            subscriber.onNext("简单示例");
            subscriber.onError(new Throwable("出错了"));
            subscriber.onCompleted();
        }
    });

    //创建观察者
    Observer<String> observer = new Observer<String>() {
        @Override
        public void onCompleted() {

            Log.e(tag, "onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            Log.e(tag, e.getMessage());
        }

        @Override
        public void onNext(String s) {
            Log.e(tag, s);
        }
    };

    //注册,是的观察者和被观察者关联,将会触发OnSubscribe.call方法
    observable.subscribe(observer);
}

public void test02() {
    //创建被观察者
    final Observable<String> observable=Observable.create(new Observable.OnSubscribe<String>(){
        @Override
        public void call(Subscriber<? super String> subscriber) {
            //调用观察者的回调
            subscriber.onNext("我是");
            subscriber.onNext("RxJava");
            subscriber.onNext("简单实例02");
            subscriber.onCompleted();
            subscriber.onError(new Throwable("出错了"));
        }
    });
    //创建观察者
    Subscriber<String> subscriber=new Subscriber<String>() {
        @Override
        public void onStart() {
            Log.e(tag,"onStart");
        }

        @Override
        public void onCompleted() {
            Log.e(tag,"onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            Log.e(tag,e.getMessage());
        }

        @Override
        public void onNext(String s) {
            Log.e(tag,s);
        }
    };
    //注册,是的观察者和被观察者关联,将会触发OnSubscribe.call方法
    observable.subscribe(subscriber);

}
public void test03(){
    String[] ints={"1","2","3","4"};
    Observable.from(ints).subscribe(new Subscriber<String>() {
        @Override
        public void onCompleted() {
            Log.e(tag,"onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            Log.e(tag,e.getMessage());
        }

        @Override
        public void onNext(String s) {
            Log.e(tag,s);
        }
    });
}
public void test04(){
    Observable.just(1,2,3,4,2).subscribe(new Subscriber<Integer>() {
        @Override
        public void onCompleted() {
            Log.e(tag,"onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            Log.e(tag,e.getMessage());
        }

        @Override
        public void onNext(Integer integer) {
            Log.e(tag,integer+"");
        }
    });
}
public void test06(){
    Log.e(tag, "------------test06-----------" +
            "\n----------线程调度---------");
    //从网络上根据用户id,请求对应用户,并显示用户积分到界面
    Observable.create(new Observable.OnSubscribe<Integer>() {
        @Override
        public void call(Subscriber<? super Integer> subscriber) {
            int id=111;
            UserInfo userinfo=getUserInfoFromNet(id);
            subscriber.onNext(userinfo.points);
        }
    }).subscribeOn(Schedulers.io())//事件产生在io线程
            .observeOn(AndroidSchedulers.mainThread())//消耗事件在主线程
            .subscribe(new Action1<Integer>() {
                @Override
                public void call(Integer points) {
                    Log.e(tag, "显示用户积分:" + points);
                }
            });
}
//模拟从网络请求
private UserInfo getUserInfoFromNet(int id) {
    UserInfo userInfo = new UserInfo();
    userInfo.points=100;
    return userInfo;
}
public class UserInfo{
    public int id;
    public int points;
}
public void test10(){
    Log.e(tag, "------------test10-----------" +
            "\n----------操作符---------");
    String[] strs={"aa","bb","bb","cc","dd","ee"};
    Observable<String> observable = Observable.from(strs);
    //filter(Func1)方法来过滤我们观测序列中不想要的值
    //take(count)方法来限制获取多少个数据
    Log.e(tag,"---------filter & take----------");
    observable
            .filter(new Func1<String, Boolean>() {
                @Override
                public Boolean call(String s) {
                    //把已b结尾的数据去掉
                    return !s.endsWith("b");
                }
            })
            .take(3)//取3个数据
            .subscribe(new Action1<String>() {
                @Override
                public void call(String s) {
                    Log.e(tag,s);
                }
            });
    Log.e(tag,"---------skip & first----------");
    observable
            .skip(3)
            .first()
            .subscribe(new Action1<String>() {
                @Override
                public void call(String s) {
                    Log.e(tag,s);
                }
            });
}

感谢果风兄弟的支持和指导

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄毛火烧雪下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值