Требуется: 'ошибка android.arch.lifecycle.LifecycleOwner

Я хочу создать служебный класс, который будет управлять моей базой данных Room. Используя данные в реальном времени, я могу наблюдать изменения в своей базе данных, однако я могу разместить этого наблюдателя только в своем классе Activity. Я хочу подтвердить, что это действительно так. Я попытался использовать как контекст, так и Activity в качестве периметра.

Я также добавил в gradle следующую библиотеку

implementation "android.arch.lifecycle:extensions:1.1.1"

Вот пример того, как я использую наблюдатель

   public DatabaseUtils(AppDatabase db,  Context context) {
        db.testDao().getAllLiveList().observe(
                context, new Observer<List<TestEntity>>() {
                    @Override
                    public void onChanged(@Nullable List<TestEntity> testEntities) {
                       // do work

                    }
                });

    }

Это отлично работает в Activity, но перемещено в класс, который не расширяет Activity. Я получаю сообщение об ошибке:

Неправильный 1-й аргумент. Найдено .... требуется: 'ошибка android.arch.lifecycle.LifecycleOwner

1
0
2 553
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это потому, что LiveData.observe принимает в качестве первого аргумента LifecycleOwner, а не Context, а активность также является LifecycleOwner:

public class SupportActivity extends Activity implements LifecycleOwner {
    // Your activity may be a subclass of this activity.
}

Так что вы, вероятно, захотите передать LifecycleOwner вместо Context на ваш DatabaseUtil. Или вы можете использовать LiveData.observeForever, если вам не важен жизненный цикл.

Другие вопросы по теме