Данные Mediator Live не обновляются при изменении отклика на модификацию - PullRequest
0 голосов
/ 08 апреля 2019

Я использую архитектурный компонент MVVM в своем приложении. Задача состоит в том, чтобы добавить модернизацию с MVVM.

Я звоню веб-серверу каждые 10 секунд, чтобы получить данные ответа.Чтобы обновить это значение, я использую живые данные Mediator.Это код для него

public LiveData<LiveResponse.ResponseData> getLiveResponse(String userId, String tokenId, BodyRequest bodyRequest) {
    final MutableLiveData<LiveResponse.ResponseData> liveResponseMutableLiveData = new MutableLiveData<>();
    restApiService.getLiveResponse(userId, tokenId,bodyRequest).enqueue(new Callback<LiveResponse>() {
        @Override
        public void onResponse(@NotNull Call<LiveResponse> call, @NotNull Response<LiveResponse> response) {
            try {
                if (response.body()!=null){
                    if (response.body().isSuccess()){
                        Timber.i(" liveResponseMutableLiveData onResponse:");
                        liveResponseMutableLiveData.setValue(response.body().getResponseData());
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(@NotNull Call<LiveResponse> call, @NotNull Throwable t) {
            liveResponseMutableLiveData.setValue(null);
        }
    });
    return liveResponseMutableLiveData;
}

Я столкнулся с проблемой получения обновленного значения, даже если ответ изменился.

и как я могу показать индикатор выполнения при вызове этого метода и показать ошибку, если таковая имеется в моей модели представления.

1 Ответ

0 голосов
/ 08 апреля 2019

YourViewModel.ktx

private val TAG = YourViewModel :: class.java.name val observableProject: MutableLiveData = MutableLiveData () var userID: MutableLiveData = MutableLiveData ()

var livedata = ObservableField<LiveResponse.ResponseData>()


fun setID(id: String,token: String,request BodyRequest) {
    this.userID.setValue(id)
    fetchDataFromServer(id,token,request)
}

fun getServerFetchdata() : LiveData<LiveResponse.ResponseData>{
  return livedata

}

private fun fetchDataFromServer(userId : String,tokenId : String,bodyRequest : BodyRequest ) {
    restApiService.getLiveResponse(userId, tokenId,bodyRequest).enqueue(new Callback<LiveResponse>() {
    @Override
    public void onResponse(@NotNull Call<LiveResponse> call, @NotNull Response<LiveResponse> response) {
        try {
            if (response.body()!=null){
                if (response.body().isSuccess()){
                    Timber.i(" liveResponseMutableLiveData onResponse:");
                    livedata.setValue(response.body().getResponseData());
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public void onFailure(@NotNull Call<LiveResponse> call, @NotNull Throwable t) {
        liveResponseMutableLiveData.setValue(null);
    }
});

}

MainActivity.java

публичное веселье getServerdata () {

viewModel.getProjectListdata (). Наблюдать (this, Observer {projects ->

// Your data recieve here
    })

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...