Я использую LiveData для получения данных с сервера. В методе onResume, вызывая одну и ту же функцию каждые 5 секунд, я могу получать данные только при первом вызове API. Второй раз наблюдатель не запускается и не может получить данные во фрагменте.
это мой фрагмент:
private int delay = 5 * 1000;
private ViewModel mViewModel;
private DetailsModel details = new DetailsModel();
mViewModel = ViewModelProviders.of(this).get(ViewModel.class);
mViewModel.getDetailsResponse("token", "ids");
mViewModel.getData().observe(this, new Observer< DetailsModel >() {
@Override
public void onChanged(DetailsModel response) {
details = response;
}});
//getting data in every 5 seconds
@Override
public void onResume() {
super.onResume();
liveHandler.postDelayed(runnable = new Runnable() {
public void run() {
mViewModel. getDetailsResponse("token", "ids");
liveHandler.postDelayed(runnable, delay);
}
}, delay);
}
ViewModel.java
private MutableLiveData<DetailsModel> detailsResponse;
private ProjectRepository repository = new ProjectRepository();
public void getDetailsResponse(String token, String ids) {
detailsResponse = repository.getMapData("token", "ids");
}
public MutableLiveData<DetailsModel> getData() {
return detailsResponse;
}
ProjectRepository.java
public MutableLiveData<DetailsModel> getMapData(String token, String ids) {
final MutableLiveData<DetailsModel> responseMutableLiveData = new MutableLiveData<>();
Call<DetailsModel> call = service.getMapDetails(token, ids);
call.enqueue(new Callback<DetailsModel>() {
@Override
public void onResponse(@NonNull Call<DetailsModel> call, @NonNull Response<DetailsModel> response) {
responseMutableLiveData.postValue(response.body());
}
@Override
public void onFailure(@NonNull Call<DetailsModel> call, @NonNull Throwable t) {
t.printStackTrace();
}
});
return responseMutableLiveData;
}