清除MVP中的CompositeDisposable [英] Clearning CompositeDisposable in MVP

查看:38
本文介绍了清除MVP中的CompositeDisposable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在MVP Architecture中使用rxjava实现改造的api调用并观察数据,问题是我不知道如何使用可抛弃型,因为无法在可以清除观察者的位置调用ondestroy(),任何有想法的人,谢谢

I'm implementing a retrofit api call and observing data using rxjava in MVP Architecture , the problem is that i have no clue on how to use disposable since it is not possible to call ondestroy() where we can clear our observer , any idea guys on how to do that , thank you

  • 这是我的api调用
class Presenter(var iView: IView,var context: Context) : IPresenter {
 override fun getGlobalData() {

       RetrofitSingleton().getGlobalStats()
           ?.subscribe(object : Observer<GlobalModel>{
           override fun onComplete() {

           }
           override fun onSubscribe(d: Disposable) {
             //here i add disposable but how to clear it 

           }
           override fun onNext(t: GlobalModel) {
               val cases = t.cases
               val death = t.deaths
               val recovered = t.recovered
               iView.getGlobalList(cases!!, death!!, recovered!!)
           }

           override fun onError(e: Throwable) {
               Log.d("TAG","Exception ${e.message}")
           }
       })
}

推荐答案

虽然在Presenter中没有像在ViewModels中具有 onCleared()那样的方法,但强烈建议将其制作成演示者意识到生命周期.我们应该有类似onViewAttached/onViewDetached之类的方法,我们将从片段的相应方法中调用该方法.

Although we don't have a method in the Presenter like we do have onCleared() in ViewModels it's highly recommended to make our presenters aware of the lifecycle. We should have methods like onViewAttached/onViewDetached that we will call from our fragment corresponding methods.

示例:

public abstract class IPresenter {
    public void onViewAttached();
    public void onViewDetached();
    // Other IPresenter methods
}

在我们的基本片段中:

public class BaseFragment<T extends IPresenter> extends Fragment {
    protected T mPresenter;
    
    @Override
    public void onViewCreated(final View view, @Nullable final Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        if (mPresenter != null) {
            mPresenter.onViewAttached();
        }
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
            if (mPresenter != null) {
                mPresenter.onViewDetached();
            }
    }
}

在您的演示者中:

public void onViewAttached() {
    mCompositeDisposable = new CompositeDisposable();
}

public void onViewDetached() {
    if (mCompositeDisposable != null) {
        mCompositeDisposable.clear();
    }
}

每当您使用RX时,都应将每个一次性用品添加到 mCompositeDisposable 中,例如:

You should add each disposable in mCompositeDisposable whenever you use RX, like:

mCompositeDisposable.add(disposable);

我不知道您的片段/演示者的结构如何,但是我认为这足以给您大致的想法.如果您需要更多帮助,请给我发送更多代码,我会尝试根据您的代码进行调整.

I don't know how your fragments/presenters are structured but I think this should be enough to give you the general idea. If you need more help please send me some more code I will try to adjust the same according to your code.

有一篇很好的文章介绍了如何实现这一目标,因此请随意看: https://medium.com/@jospedrocardoso/mvp-android-implementation-using-rxjava2-48fb377aa5cd

There is a good article about how to achive this so feel free to take a look: https://medium.com/@jospedrocardoso/mvp-an-android-implementation-using-rxjava2-48fb377aa5cd

这篇关于清除MVP中的CompositeDisposable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆