Java代码怎么取消订阅功能,RxJava2取消订阅

Retrofit2 + OkHttp + Rxjava2 在 Android 中无疑是一个最好的搭配,然而最近项目中遇到一个问题,在网络请求进行中,并且 Activity 关闭后,会出现如下异常

Caused by: java.lang.IllegalStateException: Fragment xxxxFragment{xxxx} not attached to Activity

原因的话如异常所示,所以分析之后最终想在关闭界面的时候取消调 RxJava2 的订阅

在 Observer ,其源码如下

public interface Observer {

void onSubscribe(@NonNull Disposable d);

void onNext(@NonNull T t);

void onError(@NonNull Throwable e);

void onComplete();

发现 onSubscribe 中参数 Disposable,当 Observer (观察者)与 Observable (被观察者)通过 subscribe() 建立连接后,事件可以进行传递。当发生一些其他情况,不得不断开两者之间的连接时,该怎么操作?这个时候就该 Disposable 上场了。

public interface Disposable {

void dispose();

boolean isDisposed();

}

其中有个 dispose() 的方法,通过此方法切断 Observer 与 Observable 的连接。

Observable.create(new ObservableOnSubscribe() {

@Override

public void subscribe(@NonNull ObservableEmitter e) throws Exception {

}

}).observeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new Observer() {

@Override

public void onSubscribe(@NonNull Disposable d) {

d.dispose();//实现断开Observer 与 Observable 的连接

}

@Override

public void onNext(@NonNull String s) {

Log.i("Msg:", s);

}

@Override

public void onError(@NonNull Throwable e) {

}

@Override

public void onComplete() {

}

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值