我尝试使用Mosby。但我有一个问题。
我有Activity(视图),演示者,模型和viewState。 在活动我有按钮。当我点击按钮时,我从演示者调用方法来加载数据:
presenter.loadData()
加载数据调用2方法的方法:
1。view.showProgress
model.getData()
方法model.getData()
创建 ASYNC http请求(Retrofit)。请求完成后,从视图view.hideProgress()
。
行。这个方案很好。
但我有一个问题。 步骤进行:
1.点击视图上的按钮
2。presenter.loadData()
3.在演示者中调用view.showProgress()
并启动异步 http请求
4.最小化应用程序
5.活动被破坏
6.作为viewState调用方法saveInstanceState()
的结果,以保存当前的视图状态(显示进度)
7. 5秒后,网络请求完成,演示者尝试拨打view.hideProgress()
8.但是活动不存在,因此没有任何反应。
9.用户返回申请
结果调用viewState restoreInstanceState()
结果进度再次显示,因为此状态保存在viewState上(参见第6项)。
问题是必须隐藏进度,因为当应用程序最小化时,网络请求已成功完成(对用户不可见)。
我该如何解决问题?
答案 0 :(得分:0)
当您收到HTTP
响应时,您应该将其存储在某个位置,例如,它可以是repository
存储在内存中,或者可能存储在local
存储中。然后,当您致电model.getData()
时,您应检查数据是否已保存,如果没有保存的数据,则从模型中返回此数据(如果需要,还会发送一个HTTP
请求以获取更新的数据) HTTP
请求。
现在,当活动打开时,您调用presenter.getData()
,它会在view.showProgress()
内调用model.getData()
,模型会返回一些缓存数据(如果可用)和presented
调用view.hideProgress()