В настоящее время я использую службу для сетевых вызовов с retrofit
, но я хочу обновить эту модель, чтобы использовать ViewModel
с LiveData
. Я сталкиваюсь с тем, как настроить Repository
для обновления объекта liveata.
В примерах, которые я видел, люди возвращают обернутый объект LiveData в репозиторий примерно так
public LiveData<NewsResponse> getData(){
final MutableLiveData<DataResponse> data = new MutableLiveData<>();
apiService.getData().enqueue(new Callback<DataResponse>() {
@Override
public void onResponse(Call<DataResponse> call, Response<DataResponse> response){
if (response.isSuccessful()){
data.setValue(response.body());
}
}
@Override
public void onFailure(Call<DataResponse> call, Throwable t) {
data.setValue(null);
}
});
return data;
}
тогда в ViewModel
они бы сделали
private MutableLiveData<DataResponse> dataResponse = new MutableLiveData();
private Repository repository;
public PopularGamesViewModel(@NonNull Application application) {
repository = new Repository();
dataResponse = repository.getData();
}
public MutableLiveData<DataResponse> getData(){
return dataResponse;
}
Тогда в Activity
где-то они будут делать
viewModel.getData().observe(this, dataResponse -> {
if (dataResponse != null)
{
// Do something
}
});
И что мне кажется неправильным, так это то, что в любое время, когда я хочу получить новые / обновленные данные из хранилища, создается новый объект LiveData
, поэтому предыдущие наблюдатели больше не будут работать, поэтому мне также придется снова установить наблюдателя. право?
Как вы могли бы настроить его так, чтобы вы просто постоянно наблюдали за объектом LiveData
, а затем из ViewModel
вызывали хранилище для получения любых новых данных, а затем ViewModel
обновляли объект LiveData
из Repository
?
Имеет ли смысл то, что я предлагаю?