Я хочу создать служебный класс, который будет управлять моей базой данных 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
Это потому, что 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, если вам не важен жизненный цикл.