首页 > 解决方案 > 必需:'android.arch.lifecycle.LifecycleOwner 错误

问题描述

我想创建一个实用程序类来管理我的 Room 数据库。使用实时数据,我能够观察数据库中的变化,但是,我只能将这个观察者放在我的 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 的类我收到错误:

第一个论点错误。找到....必需:'android.arch.lifecycle.LifecycleOwner 错误

标签: androidandroid-room

解决方案


那是因为LiveData.observeLifecycleOwner其作为第一个参数而不是 a Context,并且活动也是 a LifecycleOwner

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

因此,您可能希望将 aLifecycleOwner而不是 a传递Context给您的DatabaseUtil. 或者,如果您不关心生命周期,则可以使用LiveData.observeForever 。


推荐阅读