如何从存储库中删除进度栏?

问题描述 投票:2回答:2

我正在使用带有存储库的MVVM模式进行网络调用。

[当我单击视图中的按钮时,它将触发我的视图模型中的保存/获取数据方法,然后调用存储库,其中我正在使用Retrofit进行网络操作。

现在,我希望在视图内启动时,从我的存储库(onResponse或onFailure)中显示正确的消息(如保存,错误等),关闭进度条。

  public void onClick(View v) {
            ProgressDialog dialog = new ProgressDialog(getActivity());
            dialog.setMessage("saving...");
            dialog.show();
            cuttingUnitViewModel.saveProjectUnit();
        }

可以做我正在做的事还是有更好的选择?

我只想说我想同时从存储库中返回NETWORK STATE和DATA,该怎么做?

android retrofit2 android-progressbar
2个回答
0
投票

我认为您遇到的主要问题是您发起呼叫并获得响应,但是您的活动不了解任何这些更改。没有这个,您可能必须创建一些自定义util类或其他变通办法,我认为这将是非常糟糕的做法。

我的建议是,在活​​动的MutableLiveData中为响应创建一个ViewModel对象,然后将该对象传递到存储库中,以便在改造完成后可以将结果发布到livedata对象上。

并且在您的活动中,您应该观察此实时数据以进行更改。因此,当您获得结果并发布新值时,然后在活动livedataobserver的onChanged()中就可以得到结果,甚至使进度条消失。

对不起,如果这太难理解了。这是一个不错的little tutorial,您可以参考。我想通过一个例子可以使事情变得更容易。祝你好运!


0
投票

[不,在存储库中执行View活动,例如关闭ProgressBar是不适当的,因为此类仅用于处理来自不同来源的数据,这会造成紧密耦合。一种适当的设计是将回调函数设置为从[Repository]类通过View等中间层返回ViewModel的类,直到到达View层,然后在其中关闭ProgressBar


0
投票

[不,在存储库中执行View活动,例如关闭ProgressBar是不适当的,因为此类仅用于处理来自不同来源的数据,这会造成紧密耦合。一种适当的设计是将回调函数设置为从[Repository]类通过View等中间层返回ViewModel的类,直到到达View层,然后在其中关闭ProgressBar

© www.soinside.com 2019 - 2024. All rights reserved.