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);
}
});
}
}
添加回答
舉報
