gpt4 book ai didi

android - SingleObserver onSubscribe Funcation 在 Android Retrofi 中总是返回 null

转载 作者:搜寻专家 更新时间:2023-11-01 08:21:51 26 4
gpt4 key购买 nike

我对改造和 rxjava 有疑问我的代码如下:

 @GET(ApiAddress.LANGUAGE_ALL)
Single<Response<Language>> languageAll();

并实现它:

    apiRepository.languageAll().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SubscribeWithView<Response<Language>>(view) {
@Override
public void onSuccess(Response<Language> response) {
if (response.isSuccess()) {
view.setLanguage(response.getData().getResults());
}
}

@Override
public void onError(Throwable e) {
super.onError(e);
}
});

和我的 SubscribeWithView 下面:

public abstract class SubscribeWithView<T> implements SingleObserver<T> {


private WeakReference<RootView> rootView;

public SubscribeWithView(RootView rootView) {
this.rootView = new WeakReference<>(rootView);
}


@Override
public void onSubscribe(Disposable d) {
if (rootView.get() != null)
rootView.get().addDisposable(d);
}

@Override
public void onError(Throwable e) {
e.printStackTrace();
if (rootView.get() != null)
rootView.get().onError(e);
}
}

为什么 onSubscribe(Disposable d) : d 总是 null ???

最佳答案

如果您在关闭 fragment 或 Activity 后收到空值错误,这意味着您的可观察对象仍然存在。为此,您应该在 onPause()onStop()onDestroy() 中取消订阅您的 fragment 。例如:

        Disposable disposable = callApiWithRetrofit().subscribeOn(Schedulers.io()).observeOn(
AndroidSchedulers.mainThread()).subscribeWith(
new DisposableObserver<List<YourPojo>>() {
@Override
protected void onStart() {
super.onStart();
}

@Override
public void onNext(@NonNull List<AlertAssetDTO> listResponse) {

}

@Override
public void onError(@NonNull Throwable e) {

}

@Override
public void onComplete() {

}
});

@Override
protected void onDestroy() {
super.onStop();
disposable.dispose();
}

关于android - SingleObserver onSubscribe Funcation 在 Android Retrofi 中总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50212107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com