1 回答
TA贡献1789条经验 获得超8个赞
在我使用 MVVM 制作的项目中,我的活动和片段通知我的 ViewModel,就像你公开(通过调用一个像触发器一样的方法)并通过 LiveData 观察结果。
对我来说奇怪的一件事是您的存储库存储了一部分状态(重试和失败)。在我的项目中,我将此逻辑放在 ViewModel 中,并且我的存储库在这里执行简单的操作(如网络调用)。但这更多的是个人选择。
编辑:这是我根据您的代码执行此操作的方法(也许存在更好的方法)。
基本上,我更喜欢在 ViewModel 中管理 LiveData 对象而不是在存储库中,因为在我看来,存储库层只是应用程序和数据(在网络中或数据库中)以及 UI 状态之间的桥梁(如重试按钮可见性)必须由 ViewModel 管理。
存储库.java:
public class Repository {
public void getListUsers(Callback<UserResponse> callback) {
(Api.getClient().getUsersList()).enqueue(callback);
}
}
MainViewModel.java:
public class MainViewModel extends ViewModel {
...
private final MutableLiveData<Boolean> callFailure = new MutableLiveData<>();
private final MutableLiveData<List<UserModel>> users = new MutableLiveData<>();
public LiveData<Boolean> getCallFailure() {
return callFailure;
}
public LiveData<Boolean> getUsers() {
return users;
}
// THIS IS THE METHOD I'M CALLING FROM THE UI
public void retryGetUsers() {
callFailure.setValue(false);
getUsers();
}
private void getUsers() {
userRepo.getListUsers(new Callback<UserResponse>(){
@Override
public void onResponse(Call<UsersResponse> call, Response<UsersResponse> response) {
users.setValue(response.body().getUserList());
}
@Override
public void onFailure(Call<UsersResponse> call, Throwable t) {
callFailure.setValue(true);
}
});
}
}
添加回答
举报