我正在使用带有存储库的MVVM模式进行网络调用。
[当我单击视图中的按钮时,它将触发我的视图模型中的保存/获取数据方法,然后调用存储库,其中我正在使用Retrofit进行网络操作。
现在,我希望在视图内启动时,从我的存储库(onResponse或onFailure)中显示正确的消息(如保存,错误等),关闭进度条。
public void onClick(View v) {
ProgressDialog dialog = new ProgressDialog(getActivity());
dialog.setMessage("saving...");
dialog.show();
cuttingUnitViewModel.saveProjectUnit();
}
可以做我正在做的事还是有更好的选择?
我只想说我想同时从存储库中返回NETWORK STATE和DATA,该怎么做?
我认为您遇到的主要问题是您发起呼叫并获得响应,但是您的活动不了解任何这些更改。没有这个,您可能必须创建一些自定义util类或其他变通办法,我认为这将是非常糟糕的做法。
我的建议是,在活动的MutableLiveData
中为响应创建一个ViewModel
对象,然后将该对象传递到存储库中,以便在改造完成后可以将结果发布到livedata对象上。
并且在您的活动中,您应该观察此实时数据以进行更改。因此,当您获得结果并发布新值时,然后在活动livedataobserver的onChanged()
中就可以得到结果,甚至使进度条消失。
对不起,如果这太难理解了。这是一个不错的little tutorial,您可以参考。我想通过一个例子可以使事情变得更容易。祝你好运!
[不,在存储库中执行View
活动,例如关闭ProgressBar
是不适当的,因为此类仅用于处理来自不同来源的数据,这会造成紧密耦合。一种适当的设计是将回调函数设置为从[Repository]类通过View
等中间层返回ViewModel
的类,直到到达View层,然后在其中关闭ProgressBar
。
[不,在存储库中执行View
活动,例如关闭ProgressBar
是不适当的,因为此类仅用于处理来自不同来源的数据,这会造成紧密耦合。一种适当的设计是将回调函数设置为从[Repository]类通过View
等中间层返回ViewModel
的类,直到到达View层,然后在其中关闭ProgressBar
。