Room + Live Data Debugging [закрыто]

Попробуйте это

<div>{React.cloneElement(this.props.children, {...this.props})}</div>

Он работал для меня с помощью реакции-15.1.

0
задан nadeem jamal 13 July 2018 в 23:34
поделиться

1 ответ

Вы используете LiveData для извлечения пользовательских сведений, как указано в этом методе Dao

LiveData<UserLoginDetails> loadUserDetails(String userId);

Вы не можете напрямую вызвать getValue () на LiveData и ожидать получить текущее значение. LiveData необходимо, чтобы наблюдатель был рассчитан на первое место. В этом случае значение не выбирается синхронно. Вы можете найти ту же самую проблему здесь

Чтобы использовать LiveData, вам нужно наблюдать за изменениями, передав LifecycleOwner, как Activity, Как они указали в Образцах архитектурных компонентов - ProductFragment

// Observe product data
model.getObservableProduct().observe(this, new Observer<ProductEntity>() {
    @Override
    public void onChanged(@Nullable ProductEntity productEntity) {
        model.setProduct(productEntity);
    }
});

Если вам нужно значение без наблюдателя, вы можете изменить тип возврата на не LiveData, как это

UserLoginDetails loadUserDetails(String userId);

В этом случае вы не можете вызвать этот метод в основном потоке. Вы должны вызвать этот метод синхронной работы базы данных в фоновом потоке, например, используя поток Schedulers.io(), используя RxJava.

Возможным решением может быть использование RxJava с комнатой для возврата Flowable данных пользователя, для Например, как показано в примерах архитектурных компонентов - UserDao.java

Измените ваш loadUserDetails для возврата Flowable

Flowable<UserLoginDetails?> loadUserDetails(String userId);

Подпишитесь на это Flowable например, UserViewModel.java

// Map the result to desired format
// Using RxJava operators to perform checks
// If user is null or not
public void checkUserExists(String userId) {
    dao.loadUserDetails(userId)
        .map(new Function<UserLoginDetails, Boolean>() {
            @Override
            public Boolean apply(UserLoginDetails userLoginDetails) throws Exception {
                if(userLoginDetails == null){
                    return false;
                } else {
                    return true;
                }
            }
        })
        .subscribe(getObserver());
}

Таким образом, как вы получаете Flowable, вы можете применять различные операторы для проверки ваших желаемых условий и может преобразовать этот поток в логический наблюдаемый со значением в зависимости от ваших условий. Это будет очень простой и удобный подход для этого конкретного случая использования.

0
ответ дан adityakamble49 17 August 2018 в 13:19
поделиться
  • 1
    Спасибо, что это помогло выделить. попытается изменить вопрос, хотя – nadeem jamal 13 July 2018 в 23:27
  • 2
    Я был просто любопытством, вы думаете, что это правильный подход для внедрения логина для пользователей? или есть лучшие способы. Поскольку я просто новичок. Наконец, у меня есть страшная проблема после того, как я реализовал вашу первую часть, предложенную public void onChanged (@Nullable ProductEntity productEntity) {model.setProduct (productEntity); } Кажется, теперь я получаю данные в свою активность, но теперь диалоговое окно оповещения, которое показывает мне, что логин является успешным или неудачным, появляется примерно 3-4 раза каждый раз, когда я нажимаю логин. – nadeem jamal 13 July 2018 в 23:39
Другие вопросы по тегам:

Похожие вопросы: