我正在处理的项目从中间没有 Room 的 API 获取用户列表(仅网络架构)。我实际上让代码按照我想要的方式工作,但我想知道这是否是正确的方法。下面我正在标记我有疑问的地方。
我的 UI 是由 ListAdapter 支持的 RecyclerView。我有一个 ViewModel (mainViewModel) 正在观察 Repository 类提供的用户列表,还有一个布尔值来显示或不显示“再试一次”按钮。
在 MainActivity.java 我有
// Observing the boolean that represents if the api call failed
mainViewModel.getCallFailure().observe(this, new Observer<Boolean>() {
@Override
public void onChanged(Boolean aBoolean) {
if (aBoolean) {
tryAgainButton.setVisibility(View.VISIBLE);
} else {
tryAgainButton.setVisibility(View.GONE);
}
}
});
// Setting up onClickListener
tryAgainButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mainViewModel.retryCall(); // HERE IS WHERE I'M HAVING DOUBTS
}
});
MainViewModel.java 有
public class MainViewModel extends ViewModel {
...
public LiveData<Boolean> getCallFailure(){
return userRepo.getCallFailure();
}
// THIS IS THE METHOD I'M CALLING FROM THE UI
public void retryCall(){
userRepo.getRetryCallback();
}
}
最后,Repository.java 是
public class Repository {
private Call<UsersResponse> retryCall;
private Callback<UsersResponse> callback;
private final MutableLiveData<Boolean> callFailure = new MutableLiveData<>();
public LiveData<List<UserModel>> getListUsers(){
final MutableLiveData<List<UserModel>> users = new MutableLiveData<>();
callFailure.setValue(false);
(Api.getClient().getUsersList()).enqueue(new Callback<UsersResponse>() {
@Override
public void onResponse(Call<UsersResponse> call, Response<UsersResponse> response) {
users.setValue(response.body().getUsersList());
callFailure.setValue(false);
}
我试图只提及我认为相关的代码,我管理 ProgressDialog 的方式与我callFailure在存储库中处理布尔值的方式相同,并且它正在创造奇迹。但老实说,在 MainActivity.java 文件中进行调用感觉有些mainViewModel.retryCall();不对劲,我非常感谢任何建议!
拉丁的传说
相关分类