RxJava的简单使用(一)

1.创建observer(观察者)

Observer observer = new Observer<String>() {

            @Override
            public void onNext(String s) {
//当被观察者和观察者之间有了订阅关系之后,被观察者开始向观察者发送数据,则会调用此方法接收数据
                Log.i("gjw", " observer onNext: " + s);
            }
             @Override
            public void onCompleted() {
            //数据接收完之后,将会调用此方法
                Log.i("gjw", "observer onCompleted: ");
            }
            @Override
            public void onError(Throwable e) {
            //数据接收的过程中,如果出错将会调用此方法
                Log.i("gjw", "observer onError: ");
            }
        };

除了 Observer 接口之外,RxJava 还内置了一个实现了 Observer 的抽象类:Subscriber。 Subscriber 对 Observer 接口进行了一些扩展,但他们的基本使用方式是完全一样的:

subscriber = new Subscriber<String>() {
         @Override
            public void onNext(String s) {
 //当被观察者和观察者之间有了订阅关系之后,被观察者开始向观察者发送数据,则会调用此方法接收数据
                Log.i("gjw", " subscriber onNext: " + s);
            }
            @Override
            public void onCompleted() {
            //数据接收完之后,将会调用此方法
                Log.i("gjw", " subscriber onCompleted: ");
            }

            @Override
            public void onError(Throwable e) {
            /数据接收的过程中,如果出错将会调用此方法
                Log.i("gjw", " subscriber onError: ");
            }
            @Override
            public void onStart() {
                super.onStart();
                Log.i("gjw", " subscriber onStart: ");
 /**该方法在subscribe刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如数据的清零或重置。这是一个可选的方法,默认情况下他的实现为空,需要注意的是,如果对准备工作的线程有要求(例如弹出一个显示进度的对话框,这必须在主线程进行),onStart() 就不适用了,因为它总是在 subscribe 所发生的线程被调用,而不能指定线程。要在指定的线程来做准备工作,可以使用 doOnSubscribe() 方法
                 */
            }
        };

Observer 和Subscriber的区别

不仅基本使用方式一样,实质上,在 RxJava 的 subscribe 过程中,Observer 也总是会先被转换成一个 Subscriber 再使用。所以如果
你只想使用基本功能,选择 Observer 和 Subscriber 是完全一样的。它们的区别对于使用者来说主要有两点:

onStart(): 这是 Subscriber 增加的方法。它会在 subscribe 刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如数据的清零
或重置。这是一个可选方法,默认情况下它的实现为空。需要注意的是,如果对准备工作的线程有要求(例如弹出一个显示进度的对话框,这必须在主线程
执行), onStart() 就不适用了,因为它总是在 subscribe 所发生的线程被调用,而不能指定线程。要在指定的线程来做准备工作,可以使用 
doOnSubscribe() 方法,具体可以在后面的文中看到。

unsubscribe(): 这是 Subscriber 所实现的另一个接口 Subscription 的方法,用于取消订阅。在这个方法被调用
后,Subscriber 将不再接收事件。一般在这个方法调用前,可以使用 isUnsubscribed() 先判断一下状态。 unsubscribe() 这个方法很重
要,因为在 subscribe() 之后, Observable 会持有 Subscriber 的引用,这个引用如果不能及时被释放,将有内存泄露的风险。


`所以最好保持一个原则:要在不再使用的时候尽快在合适的地方(例如 onPause() onStop() 等方法中)调用 unsubscribe() 来解除引用关
系,以避免内存泄露的发生`

2.创建observable(被观察者),它决定什么时候触发事件以及触发怎样的事件。RxJava 使用 create() 方法来创建一个 Observable ,并为它定义事件触发规则

Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("1");
                subscriber.onNext("2");
                subscriber.onNext("3");
 /**
 事件队列完结,RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的 onNext() 发出时,需要触发onCompleted() 方法作为标志*/
                subscriber.onCompleted();
            }
        });

3.Subscribe (订阅)

           //observer和observable之间形成订阅关系的几种写法
           observable.subscribe(observer);
           //或者
           observable.subscribe(subscriber);
           observable.subscribe(new Action1<String>()                {
                    @Override
                    public void call(String s) {
                        Log.i("gjw", "call: " + s);
                    }
                });

                //取消订阅
                subscriber.unsubscribe();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!以下是一个简单RxJava 示例: ```java import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; public class RxJavaDemo { public static void main(String[] args) { Observable<String> observable = Observable.just("Hello, World!"); Observer<String> observer = new Observer<String>() { @Override public void onSubscribe(Disposable d) { // 在订阅时被调用 System.out.println("onSubscribe"); } @Override public void onNext(String s) { // 当收到数据时被调用 System.out.println("onNext: " + s); } @Override public void onError(Throwable e) { // 当发生错误时被调用 System.out.println("onError: " + e.getMessage()); } @Override public void onComplete() { // 当完成时被调用 System.out.println("onComplete"); } }; observable.subscribe(observer); } } ``` 这个示例中,我们创建了一个简单的 Observable 对象,它只发射了一个字符串 "Hello, World!"。然后我们创建了一个 Observer 对象,它定义了在收到数据、发生错误或完成时的行为。最后,我们通过调用 `observable.subscribe(observer)` 来订阅 Observable。 运行这个示例,你将会看到以下输出: ``` onSubscribe onNext: Hello, World! onComplete ``` 这表明在订阅时,`onSubscribe` 被调用;然后收到了数据 "Hello, World!",`onNext` 被调用;最后,`onComplete` 被调用,表示完成了数据的发射过程。 请注意,这只是 RxJava 的一个简单示例,RxJava 还有很多更强大的操作符和功能可以使用

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值