Я следую этому руководству по использованию MVVM с Retrofit
https://medium.com/@ronkan26/viewmodel-using-retrofit-mvvm-architecture-f759a0291b49
где пользователь помещает MutableLiveData внутри класса Repository:
public class MovieRepository {
private static final ApiInterface myInterface;
private final MutableLiveData<EntityMovieOutputs> listOfMovies = new MutableLiveData<>();
private static MovieRepository newsRepository;
public static MovieRepository getInstance(){
if (newsRepository == null){
newsRepository = new NewsRepository();
}
return movieRepository;
}
public MovieRepository(){
myInterface = RetrofitService.getInterface();
}
Я создаю простое приложение и заметил, что мой класс репозитория быстро заполняется множеством объектов MutableLiveData. Действительно ли это правильный способ реализации MVVM, LiveData и шаблона репозитория?
Edit1: ________________________________________________
Я создал объект AdminLiveData
, который просто содержит LiveData и имеет геттеры.
Но как мне получить ссылку на ViewModel
внутри моего AdminRepo
класса, чтобы я мог уведомить LiveData
внутри ViewModel, когда вызов Retrofit Network завершен?
private AdminService adminService;
public AdminRepo(Application application) {
BaseApplication baseApplication = (BaseApplication) application;
RetrofitClient client = baseApplication.getRetrofitClient();
adminService = client.getRetrofit().create(AdminService.class);
//AdminViewModel viewModel = (AdminViewModel) ....
// Not sure how to get reference to the viewmodel here so I can get the
// LiveData object and call postValue after the retrofit calls
}
public void getFirstPageMembers(int offset, int limit) {
adminService.getUsersPaginitation(offset, limit).enqueue(new Callback<List<UserInfo>>() {
@Override
public void onResponse(@NonNull Call<List<UserInfo>> call, @NonNull Response<List<UserInfo>> response) {
if (response.body() != null) {
//firstPageLiveData.postValue(response.body());
//Since I create the LiveData inside the ViewModel class
//instead, how do I get reference to the ViewModel's LiveData?
}
}
@Override
public void onFailure(@NonNull Call<List<UserInfo>> call, @NonNull Throwable t) {
//firstPageLiveData.postValue(null);
}
});
}
AdminViewModel
:
public class AdminActivityViewModel extends AndroidViewModel {
private AdminRepo repo;
private AdminLiveData adminLiveData = new AdminLiveData();
public AdminActivityViewModel(@NonNull Application application) {
super(application);
repo = new AdminRepo(application);
}
Как мне получить ссылку на AdminViewModel
из моего класса AdminRepo
?
MovieRepo
и еще одноAdminRepo
то же самое, что вы можете сделать с интерфейсом в стиле ретро. - person ADM   schedule 23.03.2021