android - 必需:'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 错误
解决方案
那是因为LiveData.observe将LifecycleOwner
其作为第一个参数而不是 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 。
推荐阅读
- javascript - 如果成功,如何检查是否使用 jQuery 提交表单?
- django - 将 Django 与 Python3 一起使用?
- r - 根据 2 个数据帧中的行是否匹配创建新列
- node.js - 在nodeJS中的cookie中存储数组
- python - 在 pyright 中修复“无法解析导入 [模块]”
- c# - 如何有选择地从文件中复制详细信息并将其粘贴到新文件中?
- python - PySide2 Qt 表面示例
- java - 优化这种从基础到基础的数据比较的想法?
- awk - 在命令行中运行 awk 程序时出错:“^ 反斜杠不是最后一个字符”
- angular2-nativescript - 迁移到 NativeScript 6.0 后在 Android 上运行的问题