gpt4 book ai didi

安卓 MVP : Handling all exceptions inside a presenter class

转载 作者:行者123 更新时间:2023-11-29 22:48:27 25 4
gpt4 key购买 nike

我正在 MVP 架构中实现一个 android 应用程序。

我保留一个引用以在我的演示器中查看并执行耗时的任务,例如从我的模型中的网络加载。

我的问题是,在我想要调用 View 方法的演示者内部的每次调用中,可能会发生 View 已经被销毁并且其引用在演示者内部设置为 null 的情况。

因此,当我收到来自模型的结果时,在每次像 mView.updateUISomehow() 这样的调用之前需要添加 if (mView!=null) 因为当控制达到此时可能会出现 mView 为 null 的情况。

我想知道是否有任何方法可以跳过所有 null 检查并在类范围的异常处理程序中处理演示者类的所有可能异常。

P.S. 我了解 MVVM、LiveData 和 Room。我想解决这个确切的问题:)

最佳答案

BasePresenter<View>{
View view

updateUI(){
if(view != null)
callUI()
}

abstract callUI();
}

你的 Controller 会知道 updateUI(),你可以选择如何处理它

YourPresenter<ThatElusiveview> extends BasePresenter<ThatElusiveEview>{


callUI(){
// hoping this is not directly called from the controller!!
}
}

我在使用 MVP 时遇到了同样的问题,在实际场景中会发生太多 UI 更新调用。对 Jet pack 的重构做得很好。我理解你的困境。我相信如果您为 Presenter 提供用于查看的监听器是可行的,因此如果 View 被破坏,Presenter 将保留从 Controller 到 View 的通信。

这听起来确实像检查 View != null,但您可以枚举从演示者到 View 的不同类型的更新。您可以将其放在一个地方进行检查,然后根据枚举操作的类型将它们定向到相应的更新方法。这也将有助于阅读有关演示者能够发送到 View 的不同操作的代码

关于安卓 MVP : Handling all exceptions inside a presenter class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58151873/

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