Как передать ответ о модификации из хранилища данных для просмотра модели с использованием изменяемых данных в реальном времени на Android? - PullRequest
0 голосов
/ 20 января 2019

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

Хранилище данных:

public class DataRepository {

private APIService apiService;
private static DataRepository INSTANCE = null;

public MutableLiveData<ResponseEntity> loginUser(UserEntity userEntity){

    final MutableLiveData<ResponseEntity> responseEntity = new MutableLiveData<>();
    apiService.loginUser(userEntity)
            .enqueue(new Callback<ResponseEntity>() {
                @Override
                public void onResponse(Call<ResponseEntity> call, Response<ResponseEntity> response) {
                    Log.d(Constants.LOGGER, "from data repository " + response.body());
                    responseEntity.setValue(response.body());
                }

                @Override
                public void onFailure(Call<ResponseEntity> call, Throwable t) {
                    Log.d(Constants.LOGGER, "from data repository: there was an error");
                    responseEntity.setValue(null);
                }
            });
    return responseEntity;
}
}

Посмотреть модель:

public class LoginViewModel extends AndroidViewModel {  

private MutableLiveData<ResponseEntity> networkResponse;


public void sendLoginNetworkRequest(UserEntity userEntity){
    networkResponse = mRepository.loginUser(userEntity);
}

public MutableLiveData<ResponseEntity> getResponse(){
    return networkResponse;
} 

Активность:

public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    loginViewModel = ViewModelProviders.of(this).get(LoginViewModel.class);
        loginViewModel.getResponse()
            .observe(this, new Observer<ResponseEntity>() {
                @Override
                public void onChanged(@Nullable ResponseEntity responseEntity) {
                    Log.d(Constants.LOGGER, "response entity changed " + responseEntity);
                }
            });
}

    public void loginClicked(View view) {
       loginViewModel.sendLoginNetworkRequest(userEntity);
   }
}

Журнал из хранилища данных отображается, а журнал из операции - нет. Что я делаю не так?

1 Ответ

0 голосов
/ 20 января 2019

Я нашел ответ!Мне пришлось превратить переменную responseEntity MutableLiveData в моем классе DataRepository в переменную класса и создать функцию, которая возвращает это, и теперь это работает!

Репозиторий:

public class DataRepository {

private APIService apiService;
private static DataRepository INSTANCE = null;
final MutableLiveData<ResponseEntity> responseEntity = new MutableLiveData<>();

public void loginUser(UserEntity userEntity){

    apiService.loginUser(userEntity)
            .enqueue(new Callback<ResponseEntity>() {
                @Override
                public void onResponse(Call<ResponseEntity> call, Response<ResponseEntity> response) {
                    Log.d(Constants.LOGGER, "from data repository " + response.body());
                    responseEntity.setValue(response.body());
                }

                @Override
                public void onFailure(Call<ResponseEntity> call, Throwable t) {
                    Log.d(Constants.LOGGER, "from data repository: there was an error");
                    responseEntity.setValue(null);
                }
            });
}
public MutableLiveData<ResponseEntity> getLiveResponses(){
        return responseEntity;
    }
}

Viewmodel:

public class LoginViewModel extends AndroidViewModel {      

public void sendLoginNetworkRequest(UserEntity userEntity){
    mRepository.loginUser(userEntity);
}

public MutableLiveData<ResponseEntity> getResponse(){
    return mRepository.getLiveResponse;
} 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...