清除MVP中的CompositeDisposable [英] Clearning CompositeDisposable in MVP
问题描述
我正在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屋!