RxJava详解(基于2.X版本的功能操作符)

本章节讲述RxJava基于2.X版本的功能操作符

 

 

 

1.subscribe()

 

<1> 作用

订阅,即连接观察者 & 被观察者

 

 

<2> 代码&结果

https://blog.csdn.net/weixin_37730482/article/details/69280013

 

多个重载的方法。

 

 

 

 

2.Observable.subscribeOn() &Observable.observeOn() 
 

 

<1> 作用

指定被观察者&观察者所在的线程

 

 

<2> 代码&结果

https://blog.csdn.net/weixin_37730482/article/details/74460807

 

 

 

 

3.delay()

 

<1> 作用

使得被观察者延迟一段时间再发送事件

 

 

<2> 代码

package com.example.rxjava20;

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import java.util.concurrent.TimeUnit;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public class MainActivity extends AppCompatActivity {

    private Disposable disposable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        method();
    }

    /**
     * 创建 RxJava delay功能操作符
     */

    public void method() {
        Observable.create(new ObservableOnSubscribe<Object>() {
            @Override
            public void subscribe(ObservableEmitter<Object> e) throws Exception {
                if (null == e) {
                    return;
                }

                if (!e.isDisposed()) {
                    e.onNext("被观察者发送数据");
                    Log.d("TAG", "被观察者发送数据 开始发送数据...");
                }
            }
        }).delay(5, TimeUnit.SECONDS)//被观察者延时5秒发送数据
                .subscribe(new Observer<Object>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        if (null == d) {
                            return;
                        }
                        disposable = d;
                        Log.d("TAG", "观察者 onSubscribe 方法 是否断开连接----:" + disposable.isDisposed());
                    }

                    @Override
                    public void onNext(Object value) {
                        Log.d("TAG", "观察者 onNext 方法 value.toString()----:" + value.toString());
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });

    }

    /**
     * onDestroy方法
     */

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (null != disposable) {
            Log.d("TAG", "onDestroy方法 执行时是否断开----:" + disposable.isDisposed());
            if (!disposable.isDisposed()) {//没有断开
                disposable.dispose();//断开
                Log.d("TAG", "onDestroy方法 断开订阅");
            }
        }
    }


}

 

 

<3> 结果

D/TAG: 观察者 onSubscribe 方法 是否断开连接----:false


D/TAG: 被观察者发送数据 开始发送数据...



//5秒后打印

D/TAG: 观察者 onNext 方法 value.toString()----:被观察者发送数据

 

 

<4> 关闭页面

D/TAG: onDestroy方法 执行时是否断开----:false

D/TAG: onDestroy方法 断开订阅

 

 

<5> delay重载方法

delay(long delay,TimeUnit unit)

参数1:时间

参数2:时间单位



delay(long delay,TimeUnit unit,mScheduler scheduler)

参数1:时间

参数2:时间单位

参数3:线程调度器


delay(long delay,TimeUnit unit,boolean delayError)

指定延迟时间  & 错误延迟 错误延迟,即:若存在Error事件,则如常执行,执行后再抛出错误异常。

参数1:时间

参数2:时间单位

参数3:错误延迟参数





delay(long delay,TimeUnit unit,mScheduler scheduler,boolean delayError): 

指定延迟多长时间并添加调度器,错误通知可以设置是否延迟。

参数1:时间

参数2:时间单位

参数3:线程调度器

参数4:错误延迟参数

 

 

 

 

4.doXXX()

 

<1> 作用

在某个事件的生命周期中调用。如发送事件前初始化发送事件后回调请求等等。

 

具体方法如下

doOnSubscribe():观察者订阅时调用。


doOnEach():被观察者调用一次执行一次。


doOnNext():onNext方法调用前调用。


doAfterNext():onNext方法调用后调用。


doOnComplete():onComplete方法执行时调用。


doOnError():onError方法执行时调用。


doOnTerminate():正常发送完成&异常完成都执行。


doFinally():最后执行。


doAfterTerminate():真正的最后执行。

 

 

<2> 代码

package com.wjn.rxdemo.rxjava;

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import com.wjn.rxdemo.R;

import io.reactivex.Notification;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Action;
import io.reactivex.functions.Consumer;

public class RxJavaActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rxjava);
        method();
    }

    /**
     * 创建 RxJava doXXX功能操作符
     */

    public void method() {
        Observable.create(new ObservableOnSubscribe<Object>() {
            @Override
            public void subscribe(ObservableEmitter<Object> e) throws Exception {
                if (null == e) {
                    return;
                }

                if (!e.isDisposed()) {
                    e.onNext(1);
                    e.onNext(new RuntimeException());
                    e.onComplete();
                }
            }
        }).doOnSubscribe(new Consumer<Disposable>() {
            @Override
            public void accept(Disposable disposable) {
                Log.d("TAG", "生命周期 doOnSubscribe方法 执行...----:" + disposable.isDisposed());
            }
        }).doOnEach(new Consumer<Notification<Object>>() {
            @Override
            public void accept(Notification<Object> objectNotification) {
                Log.d("TAG", "生命周期 doOnEach方法 执行...----:" + objectNotification.toString());
            }
        }).doOnNext(new Consumer<Object>() {
            @Override
            public void accept(Object o) {
                Log.d("TAG", "生命周期 doOnNext方法 执行...----:" + o.toString());
            }
        }).doAfterNext(new Consumer<Object>() {
            @Override
            public void accept(Object o) {
                Log.d("TAG", "生命周期 doAfterNext方法 执行...----:" + o.toString());
            }
        }).doOnComplete(new Action() {
            @Override
            public void run() {
                Log.d("TAG", "生命周期 doOnComplete方法 执行...");
            }
        }).doOnError(new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) {
                Log.d("TAG", "生命周期 doOnError方法 执行...----:" + throwable.toString());
            }
        }).doOnTerminate(new Action() {
            @Override
            public void run() throws Exception {
                Log.d("TAG", "生命周期 doOnTerminate方法 执行...");
            }
        }).doAfterTerminate(new Action() {
            @Override
            public void run() {
                Log.d("TAG", "生命周期 doAfterTerminate方法 执行...");
            }
        }).doFinally(new Action() {
            @Override
            public void run() {
                Log.d("TAG", "生命周期 doFinally方法 执行...");
            }
        }).subscribe(new Observer<Object>() {
            @Override
            public void onSubscribe(Disposable d) {
                Log.d("TAG", "观察者 onSubscribe方法 执行...");
            }

            @Override
            public void onNext(Object value) {
                Log.d("TAG", "观察者 onNext 方法执行...value.toString()----:" + value.toString());
            }

            @Override
            public void onError(Throwable e) {
                Log.d("TAG", "观察者 onError 方法执行...e.toString()----:" + e.toString());
            }

            @Override
            public void onComplete() {
                Log.d("TAG", "观察者 onComplete方法 执行...");
            }
        });
    }

}

 

 

<3> 结果

被观察者 执行 e.onNext(1); 即发生第一次正确的onNext方法


D/TAG: 生命周期 doOnSubscribe方法 执行...----:false

D/TAG: 观察者 onSubscribe方法 执行...

D/TAG: 生命周期 doOnEach方法 执行...----:OnNextNotification[1]

D/TAG: 生命周期 doOnNext方法 执行...----:1

D/TAG: 观察者 onNext 方法执行...value.toString()----:1

D/TAG: 生命周期 doAfterNext方法 执行...----:1


**************************************************************************


被观察者 执行 e.onNext(new RuntimeException()); 即发生第二次错误的onNext方法


D/TAG: 生命周期 doOnEach方法 执行...----:OnNextNotification[java.lang.RuntimeException]

D/TAG: 生命周期 doOnNext方法 执行...----:java.lang.RuntimeException

D/TAG: 观察者 onNext 方法执行...value.toString()----:java.lang.RuntimeException

D/TAG: 生命周期 doAfterNext方法 执行...----:java.lang.RuntimeException


*****************************************************************************

被观察者 执行 e.onComplete(); 即发生最后接收发生数据


D/TAG: 生命周期 doOnEach方法 执行...----:OnCompleteNotification

D/TAG: 生命周期 doOnComplete方法 执行...

D/TAG: 生命周期 doOnTerminate方法 执行...

D/TAG: 观察者 onComplete方法 执行...

D/TAG: 生命周期 doFinally方法 执行...

D/TAG: 生命周期 doAfterTerminate方法 执行...

 

<4> 上述代码修改create操作符,只发送onComplete。

if (!e.isDisposed()) {
    e.onComplete();
}

 

结果

D/TAG: 生命周期 doOnSubscribe方法 执行...----:false

D/TAG: 观察者 onSubscribe方法 执行...

D/TAG: 生命周期 doOnEach方法 执行...----:OnCompleteNotification

D/TAG: 生命周期 doOnComplete方法 执行...

D/TAG: 生命周期 doOnTerminate方法 执行...

D/TAG: 观察者 onComplete方法 执行...

D/TAG: 生命周期 doFinally方法 执行...

D/TAG: 生命周期 doAfterTerminate方法 执行...

 

 

<5> 上述代码修改create操作符,只发送onError。

if (!e.isDisposed()) {
    e.onError(new RuntimeException());
}

 

结果

D/TAG: 生命周期 doOnSubscribe方法 执行...----:false

D/TAG: 观察者 onSubscribe方法 执行...

D/TAG: 生命周期 doOnEach方法 执行...----:OnErrorNotification[java.lang.RuntimeException]

D/TAG: 生命周期 doOnError方法 执行...----:java.lang.RuntimeException

D/TAG: 生命周期 doOnTerminate方法 执行...

D/TAG: 观察者 onError 方法执行...e.toString()----:java.lang.RuntimeException

D/TAG: 生命周期 doFinally方法 执行...

D/TAG: 生命周期 doAfterTerminate方法 执行...

 

 

<6> 上述代码修改create操作符,为empty操作符。

 

代码

package com.wjn.rxdemo.rxjava;

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import com.wjn.rxdemo.R;

import io.reactivex.Notification;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Action;
import io.reactivex.functions.Consumer;

public class RxJavaActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rxjava);
        method();
    }

    /**
     * 创建 RxJava doXXX功能操作符
     */

    public void method() {
        Observable
                .empty()
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) {
                        Log.d("TAG", "生命周期 doOnSubscribe方法 执行...----:" + disposable.isDisposed());
                    }
                })
                .doOnEach(new Consumer<Notification<Object>>() {
                    @Override
                    public void accept(Notification<Object> objectNotification) {
                        Log.d("TAG", "生命周期 doOnEach方法 执行...----:" + objectNotification.toString());
                    }
                })
                .doOnNext(new Consumer<Object>() {
                    @Override
                    public void accept(Object o) {
                        Log.d("TAG", "生命周期 doOnNext方法 执行...----:" + o.toString());
                    }
                })
                .doAfterNext(new Consumer<Object>() {
                    @Override
                    public void accept(Object o) {
                        Log.d("TAG", "生命周期 doAfterNext方法 执行...----:" + o.toString());
                    }
                })
                .doOnComplete(new Action() {
                    @Override
                    public void run() {
                        Log.d("TAG", "生命周期 doOnComplete方法 执行...");
                    }
                })
                .doOnError(new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) {
                        Log.d("TAG", "生命周期 doOnError方法 执行...----:" + throwable.toString());
                    }
                })
                .doOnTerminate(new Action() {
                    @Override
                    public void run() throws Exception {
                        Log.d("TAG", "生命周期 doOnTerminate方法 执行...");
                    }
                })
                .doAfterTerminate(new Action() {
                    @Override
                    public void run() {
                        Log.d("TAG", "生命周期 doAfterTerminate方法 执行...");
                    }
                })
                .doFinally(new Action() {
                    @Override
                    public void run() {
                        Log.d("TAG", "生命周期 doFinally方法 执行...");
                    }
                })
                .subscribe(new Observer<Object>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d("TAG", "观察者 onSubscribe方法 执行...");
                    }

                    @Override
                    public void onNext(Object value) {
                        Log.d("TAG", "观察者 onNext 方法执行...value.toString()----:" + value.toString());
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d("TAG", "观察者 onError 方法执行...e.toString()----:" + e.toString());
                    }

                    @Override
                    public void onComplete() {
                        Log.d("TAG", "观察者 onComplete方法 执行...");
                    }
                });
    }

}

 

 

结果

D/TAG: 生命周期 doOnSubscribe方法 执行...----:true

D/TAG: 观察者 onSubscribe方法 执行...

D/TAG: 生命周期 doOnEach方法 执行...----:OnCompleteNotification

D/TAG: 生命周期 doOnComplete方法 执行...

D/TAG: 生命周期 doOnTerminate方法 执行...

D/TAG: 观察者 onComplete方法 执行...

D/TAG: 生命周期 doFinally方法 执行...

D/TAG: 生命周期 doAfterTerminate方法 执行...

 

 

 

 

5. onErrorReturn()

 

<1> 作用

遇到观察者发送错误时,发送1个特殊事件 正常终止

 

 

<2> 代码

package com.example.rxjava20;

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Function;

public class MainActivity extends AppCompatActivity {

    private Disposable disposable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        method();
    }

    /**
     * 创建 RxJava onErrorReturn功能操作符
     */

    public void method() {
        Observable.create(new ObservableOnSubscribe<Object>() {
            @Override
            public void subscribe(ObservableEmitter<Object> e) throws Exception {
                if (null == e) {
                    return;
                }

                if (!e.isDisposed()) {
                    e.onNext(1);
                    e.onNext("张三");
                    e.onError(new Throwable());
                }
            }
        }).onErrorReturn(new Function<Throwable, Object>() {
            @Override
            public Object apply(Throwable throwable) throws Exception {
                return "Code:123";
            }
        }).subscribe(new Observer<Object>() {
            @Override
            public void onSubscribe(Disposable d) {
                if (null == d) {
                    return;
                }
                disposable = d;
                Log.d("TAG", "观察者 onSubscribe 方法 是否断开连接----:" + disposable.isDisposed());

            }

            @Override
            public void onNext(Object value) {
                Log.d("TAG", "观察者 onNext 方法 value.toString()----:" + value.toString());
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });

    }

    /**
     * onDestroy方法
     */

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (null != disposable) {
            Log.d("TAG", "onDestroy方法 执行时是否断开----:" + disposable.isDisposed());
            if (!disposable.isDisposed()) {//没有断开
                disposable.dispose();//断开
                Log.d("TAG", "onDestroy方法 断开订阅");
            }
        }
    }

}

 

 

<3> 结果

D/TAG: 观察者 onSubscribe 方法 是否断开连接----:false

D/TAG: 观察者 onNext 方法 value.toString()----:1

D/TAG: 观察者 onNext 方法 value.toString()----:张三

D/TAG: 观察者 onNext 方法 value.toString()----:Code:123

 

 

<4> 关闭页面

D/TAG: onDestroy方法 执行时是否断开----:true

 

 

 

 

6.onErrorResumeNext()&onExceptionResumeNext()

 

<1> 作用

遇到错误时,发送1个新的Observable

onErrorResumeNext():拦截的错误 = Throwable

onExceptionResumeNext()拦截的错误 = Exception

 

 

<2> 代码

package com.example.rxjava20;

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.ObservableSource;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Function;

public class MainActivity extends AppCompatActivity {

    private Disposable disposable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        method();
    }

    /**
     * 创建 RxJava onErrorResumeNext功能操作符
     */

    public void method() {
        Observable.create(new ObservableOnSubscribe<Object>() {
            @Override
            public void subscribe(ObservableEmitter<Object> e) throws Exception {
                if (null == e) {
                    return;
                }

                if (!e.isDisposed()) {
                    e.onNext(1);
                    e.onNext("张三");
                    e.onError(new Throwable());
                }
            }
        })
                .onErrorResumeNext(new Function<Throwable, ObservableSource<?>>() {
                    @Override
                    public ObservableSource<?> apply(Throwable throwable) throws Exception {
                        return Observable.just("遇到观察者发送的错误数据 修改后的内容");
                    }
                })
                .subscribe(new Observer<Object>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        if (null == d) {
                            return;
                        }
                        disposable = d;
                        Log.d("TAG", "观察者 onSubscribe 方法 是否断开连接----:" + disposable.isDisposed());
                    }

                    @Override
                    public void onNext(Object value) {
                        Log.d("TAG", "观察者 onNext 方法 value.toString()----:" + value.toString());
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });

    }

    /**
     * onDestroy方法
     */

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (null != disposable) {
            Log.d("TAG", "onDestroy方法 执行时是否断开----:" + disposable.isDisposed());
            if (!disposable.isDisposed()) {//没有断开
                disposable.dispose();//断开
                Log.d("TAG", "onDestroy方法 断开订阅");
            }
        }
    }

}

 

 

<3> 结果

D/TAG: 观察者 onSubscribe 方法 是否断开连接----:false

D/TAG: 观察者 onNext 方法 value.toString()----:1

D/TAG: 观察者 onNext 方法 value.toString()----:张三

D/TAG: 观察者 onNext 方法 value.toString()----:遇到观察者发送的错误数据 修改后的内容

 

 

 

 

7. retry()

 

<1> 作用

重试,即当出现错误时,让被观察者(Observable)重新发射数据。ThrowableException 都可拦截。

retry():出现错误时,让被观察者重新发送数据。若一直错误,则一直重新发送。如果不出现错误不重复执行

retry(long time):出现错误时,让被观察者重新发送数据。可设置重试次数。如果不出现错误不重复执行

retry(long times, Predicate<? super Throwable> predicate) 出现错误后,判断是否需要重新发送数据 如果需要 重试times次。如果不出现错误不重复执行

 

 

<2> 代码

package com.example.rxjava20;

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public class MainActivity extends AppCompatActivity {

    private Disposable disposable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        method();
    }

    /**
     * 创建 RxJava retry功能操作符
     */

    public void method() {
        Observable.create(new ObservableOnSubscribe<Object>() {
            @Override
            public void subscribe(ObservableEmitter<Object> e) throws Exception {
                if (null == e) {
                    return;
                }

                if (!e.isDisposed()) {
                    e.onNext(1);
                    e.onNext("张三");
                    e.onError(new Throwable());
                }
            }
        }).retry(2)//重试两次
                .subscribe(new Observer<Object>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        if (null == d) {
                            return;
                        }
                        disposable = d;
                        Log.d("TAG", "观察者 onSubscribe 方法 是否断开连接----:" + disposable.isDisposed());

                    }

                    @Override
                    public void onNext(Object value) {
                        Log.d("TAG", "观察者 onNext 方法 value.toString()----:" + value.toString());
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });

    }

    /**
     * onDestroy方法
     */

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (null != disposable) {
            Log.d("TAG", "onDestroy方法 执行时是否断开----:" + disposable.isDisposed());
            if (!disposable.isDisposed()) {//没有断开
                disposable.dispose();//断开
                Log.d("TAG", "onDestroy方法 断开订阅");
            }
        }
    }

}

 

 

<3> 结果

D/TAG: 观察者 onSubscribe 方法 是否断开连接----:false

D/TAG: 观察者 onNext 方法 value.toString()----:1

D/TAG: 观察者 onNext 方法 value.toString()----:张三





D/TAG: 观察者 onNext 方法 value.toString()----:1

D/TAG: 观察者 onNext 方法 value.toString()----:张三





D/TAG: 观察者 onNext 方法 value.toString()----:1

D/TAG: 观察者 onNext 方法 value.toString()----:张三

重试2次,一共执行3次。

 

<4> 关闭页面

D/TAG: onDestroy方法 执行时是否断开----:false

D/TAG: onDestroy方法 断开订阅

 

 

 

8.retryUntil()

 

<1> 作用

出现错误后,判断是否需要重新发送数据。类似 retry(long times, Predicate<? super Throwable> predicate) 出现错误后,判断是否需要重新发送数据 如果需要 重试times次。

 

 

<2> 代码

package com.example.rxjava20;

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.BooleanSupplier;

public class MainActivity extends AppCompatActivity {

    private Disposable disposable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        method();
    }

    /**
     * 创建 RxJava Map变换符
     */

    public void method() {
        Observable.create(new ObservableOnSubscribe<Object>() {
            @Override
            public void subscribe(ObservableEmitter<Object> e) throws Exception {
                if (null == e) {
                    return;
                }

                if (!e.isDisposed()) {
                    e.onNext(1);
                    e.onNext("张三");
                    e.onError(new Throwable());
                }
            }
        }).retryUntil(new BooleanSupplier() {
            @Override
            public boolean getAsBoolean() throws Exception {
                return false;//一直重试
            }
        })
                .subscribe(new Observer<Object>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        if (null == d) {
                            return;
                        }
                        disposable = d;
                        Log.d("TAG", "观察者 onSubscribe 方法 是否断开连接----:" + disposable.isDisposed());
                    }

                    @Override
                    public void onNext(Object value) {
                        Log.d("TAG", "观察者 onNext 方法 value.toString()----:" + value.toString());
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });

    }

    /**
     * onDestroy方法
     */

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (null != disposable) {
            Log.d("TAG", "onDestroy方法 执行时是否断开----:" + disposable.isDisposed());
            if (!disposable.isDisposed()) {//没有断开
                disposable.dispose();//断开
                Log.d("TAG", "onDestroy方法 断开订阅");
            }
        }
    }

}

 

 

<3> 结果

return false;//一直重试

return true;//不重试

 

 

 

 

9.retryWhen()

 

<1> 作用

遇到错误时,将发生的错误传递给一个新的被观察者。并决定是否需要重新订阅原始被观察者。

 

 

<2> 代码

 

 

<3> 结果

 

 

 

10.repeat()

 

<1> 作用

重复不断地发送被观察者事件。

 

repeat()重复不断地发送被观察者事件。

repeat(long times)重复 times次 发送被观察者事件。

 

 

<2> 代码

package com.example.rxjava20;

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public class MainActivity extends AppCompatActivity {

    private Disposable disposable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        method();
    }

    /**
     * 创建 RxJava repeat功能操作符
     */

    public void method() {
        Observable.create(new ObservableOnSubscribe<Object>() {
            @Override
            public void subscribe(ObservableEmitter<Object> e) throws Exception {
                if (null == e) {
                    return;
                }

                if (!e.isDisposed()) {
                    e.onNext(1);
                    e.onNext("张三");
                    e.onComplete();
                }
            }
        }).repeat(2)//重复两次
                .subscribe(new Observer<Object>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        if (null == d) {
                            return;
                        }
                        disposable = d;
                        Log.d("TAG", "观察者 onSubscribe 方法 是否断开连接----:" + disposable.isDisposed());
                    }

                    @Override
                    public void onNext(Object value) {
                        Log.d("TAG", "观察者 onNext 方法 value.toString()----:" + value.toString());
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });

    }

    /**
     * onDestroy方法
     */

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (null != disposable) {
            Log.d("TAG", "onDestroy方法 执行时是否断开----:" + disposable.isDisposed());
            if (!disposable.isDisposed()) {//没有断开
                disposable.dispose();//断开
                Log.d("TAG", "onDestroy方法 断开订阅");
            }
        }
    }

}

 

 

<3> 结果

D/TAG: 观察者 onSubscribe 方法 是否断开连接----:false

D/TAG: 观察者 onNext 方法 value.toString()----:1

D/TAG: 观察者 onNext 方法 value.toString()----:张三





D/TAG: 观察者 onNext 方法 value.toString()----:1

D/TAG: 观察者 onNext 方法 value.toString()----:张三

 

 

<4> 关闭页面

D/TAG: onDestroy方法 执行时是否断开----:false

D/TAG: onDestroy方法 断开订阅

 

 

 

11.repeatWhen()

 

<1> 作用

有条件地、重复发送 被观察者事件。

 

 

<2> 代码

 

 

<3> 结果

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值