Android 实时数据观察器异常

2024-01-12

我正在尝试实现新的 Android 架构组件,并在片段和视图模型中使用了实时数据,但是当我向实时数据添加观察者时,应用程序崩溃并抛出此异常。

Process: com.nrs.nsnik.architecturecomponents, PID: 3071

java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.nrs.nsnik.architecturecomponents/com.nrs.nsnik.architecturec
omponents.view.MainActivity}: java.lang.ClassCastException: android.arch.lifecycle.LiveData_LifecycleBoundObserver_LifecycleAdapter cannot be cast to android.arch.lifecycle.GeneratedAdapter
.
.
.
.
 Caused by: java.lang.ClassCastException: android.arch.lifecycle.LiveData_LifecycleBoundObserver_LifecycleAdapter cannot be cast to android.arch.lifecycle.GeneratedAdapter

列表片段:

public class ListFragment extends Fragment {

    @BindView(R.id.listFragmentRecyclerView)
    RecyclerView mRecyclerView;
    @BindView(R.id.listFragmentAddItem)
    FloatingActionButton mFloatingActionButton;
    private Unbinder mUnbinder;
    private CompositeDisposable mCompositeDisposable;
    private ListViewModel mListViewModel;
    private List<NoteEntity> mNoteEntityList;
    private ListAdapter mListAdapter;
    private NoteDatabase mNoteDatabase;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_list, container, false);
        mUnbinder = ButterKnife.bind(this, v);
        mListViewModel = ViewModelProviders.of(this).get(ListViewModel.class);
        mNoteDatabase = ((MyApplication)getActivity().getApplication()).getNoteDatabaseInstance();
        initialize();
        listeners();
        return v;
    }

    private void initialize() {
        mCompositeDisposable = new CompositeDisposable();
        mNoteEntityList = new ArrayList<>();
        mListAdapter = new ListAdapter(getActivity(), mNoteEntityList);
        mListViewModel.getNoteList().observe(this, noteEntityList -> {
            mListAdapter.swapList(noteEntityList);
            mListAdapter.notifyDataSetChanged();
        });
    }

    private void cleanUp() {
        if (mUnbinder != null) {
            mUnbinder.unbind();
        }
        if (mCompositeDisposable != null) {
            mCompositeDisposable.dispose();
        }
    }

    private void listeners() {
        RxView.clicks(mFloatingActionButton).subscribe(o -> {
        AlertDialog.Builder newNoteDialog = new AlertDialog.Builder(getActivity());
        View v = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_add_note_dialog, null);
        newNoteDialog.setView(v);
        EditText editText = v.findViewById(R.id.addNoteEditText);
        newNoteDialog.setNegativeButton(getActivity().getResources().getString(R.string.cancel), (dialogInterface, i) -> {
        }).setPositiveButton(getActivity().getResources().getString(R.string.add), (dialogInterface, i) -> {
            if (isValid(editText)) {
                NoteEntity entity = new NoteEntity();
                entity.setNote(editText.getText().toString());
                entity.setDate(getCurrentDate());
                mNoteDatabase.getNoteDao().insertNote(entity);
            }
        });
        newNoteDialog.create().show();
        });
    }

    private Date getCurrentDate() {
        Date date = new Date(Calendar.getInstance().getTimeInMillis());
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH);
        simpleDateFormat.format(date);
        return date;
    }

    private boolean isValid(EditText editText) {
        return !(editText.getText().toString().length() <= 0 || editText.getText().toString().isEmpty());
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        cleanUp();
        if (BuildConfig.DEBUG) {
            RefWatcher refWatcher = MyApplication.getRefWatcher(getActivity());
            refWatcher.watch(this);
        }
    }
}

视图模型:

public class ListViewModel extends AndroidViewModel {

    private LiveData<List<NoteEntity>> mNoteList;
    private final NoteDatabase mNoteDatabase;

    ListViewModel(Application application) {
        super(application);
        mNoteDatabase = ((MyApplication)application).getNoteDatabaseInstance();
        mNoteList = mNoteDatabase.getNoteDao().getNoteList();
    }

    public LiveData<List<NoteEntity>> getNoteList() {
        return mNoteList;
    } 
}

注意数据库:

@Database(entities = {NoteEntity.class}, version = 1)
public abstract class NoteDatabase extends RoomDatabase {
    public abstract NoteDao getNoteDao();
}

如果在实时数据上添加正面,应用程序会崩溃。

我正在使用“Room.databaseBuilder(....)”函数在我的应用程序类中构建数据库的单个实例,并在任何地方使用它,我的 NoteEntity 类具有三个字段,其中一个是 id,它是自动生成的主键。


我有类似的错误,在我的情况下是由 gradle.build 文件中的这种依赖性引起的:

implementation "android.arch.lifecycle:common-java8:1.0.0-beta2"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 实时数据观察器异常 的相关文章

随机推荐

  • 如何获取BLE广告通道索引号

    我想在读取广告数据包时获取广告频道索引号 我只能看到广告信息由标头信息 UUID 主编号 次编号和 RSSI 值组成 这些信息中是否嵌入了频道号 我能知道我是否正在读取通道 37 38 39 上的数据包吗 在使用 HCI 与蓝牙控制器通信的
  • 尝试 Keras SimpleRNN 时出现 NotImplementedError

    我正在尝试使用下面的代码在我的 Jupyter Labs Notebook 中使用 Keras SimpleRNN 实现一个非常基本的 RNN 模型 为什么我会收到错误 应该做什么 我的Python版本是3 8 11 Keras是2 4 3
  • VS2015:将“watch”:true添加到tsconfig.json导致JsErrorScriptException(0x30001)

    我创建了一个虚拟基本项目VS2015 社区更新 3 版本 14 0 25424 00 使用这个很棒的教程 aspnet core web api angularjs 2 http www talkingdotnet com cascadin
  • 用百分比预加载 - javascript/jquery

    我进行了谷歌搜索 但找不到用百分比加载的方法 有人知道我如何找到这样的例子吗 我需要在显示内容之前对网站进行 0 100 的预加载 不带栏 但我找不到任何示例 我推荐这个插件 太奇妙了 从下载http demo inwebson com d
  • TypeScript 中的构造函数,缺少什么?

    我试图弄清楚如何将 TypeScript 提供的类型安全性与 JS 中旧的普通构造函数一起使用 我有一个非常简单的示例 看起来很简单 但我错过了一些东西并且无法使用 TypeScript 进行编译 interface IMyService
  • 是否可以使用 jQuery.Support 检查 PNG 支持?

    我的问题是关于jQuery 支持 http docs jquery com Utilities jQuery support system 我想知道是否可以使用这种方法判断浏览器是否支持半透明背景PNG图像 编辑 我对特定问题的 CSS 解
  • 巨大的交易日志 - 这正常吗?

    我有一个 5GB 数据库和一个 20GB 事务日志 SQL Server 2005 不知道为什么它这么大 或者是什么让它这么大 它曾经大约是数据库大小的 1 2 DB 每月增长约 1GB 对于相对于数据库文件大小来说事务日志应该有多大 是否
  • 更新 cabal 时出错

    我无法在 Windows 7 上更新 Cabal 跑步时cabal install cabal install 我收到以下错误 Linking C Users sberg AppData Local Temp Cabal 1 18 1 2
  • 执行(点击)与订阅

    编辑 在 RxJs 6 之前 tap被称为do 更新了标题以反映点击 我想了解使用的最佳实践是什么 subscribe and do可观察量的方法 例如 如果我需要在从服务器加载初始数据后做一些工作 const init Observabl
  • 如何在 aspnet core 应用程序中使用多个目录来存放静态文件?

    默认情况下 wwwroot 目录可以存放静态文件 但是 在某些情况下 最好有两个静态文件目录 例如 让 webpack 将构建转储到一个 gitignored 目录中 并将一些图像文件 favicon 等保存在非 gitignored 目录
  • 如何禁用 UITableView 垂直向上滚动?

    我在用着EGORefreshTableHeader与 UITableView 中的静态单元格 在 nib 中定义 结合使用 我希望能够向下滚动表格视图以触发EGORefreshTableHeader从而刷新静态单元中的数据 但是 由于静态单
  • 无法使用 CONFIG_CC_STACKPROTECTOR_STRONG:编译器不支持 -fstack-protector-strong

    我在我的笔记本电脑上运行 Ubuntu 16 10 我最近从以下网站下载了 Linux 内核git 但是当我尝试从终端使用 make 命令编译它时 它正在给我 error Cannot use CONFIG CC STACKPROTECTO
  • 无法在 Chrome (mac) 中打开某些 html 文件

    有一些 HTML 文件 我没有找到模式 无法通过终端 GUI 或右键单击 通过 Sublime Text 3 在浏览器中打开 打开 打开文件的默认浏览器肯定设置为Chrome 当我说在浏览器中打开文件时 它会将我带到 Chrome 窗口 但
  • 更改 SQL Server 中的主键列

    UPDATE 以下是查询结果的约束 SELECT FROM INFORMATION SCHEMA KEY COLUMN USAGE WHERE TABLE NAME history CONSTRAINT NAME COLUMN NAME O
  • C# 检查文件是否为媒体文件

    我需要一种方法来告诉我文件是图像 音频还是视频文件 我可以用 C 做到这一点吗 这取决于您希望它有多坚固 最简单的方法是检查扩展名 如下所示 static string mediaExtensions PNG JPG JPEG BMP GI
  • 如何从sql server中给定邮政编码和给定半径(以英里为单位)附近的表中获取所有其他邮政编码或(纬度和经度)?

    我有带有纬度 经度和邮政编码的表格 我想选择靠近给定邮政编码和半径 以英里为单位 的记录 例如 用户将输入邮政编码 NW44JL 和半径 1 英里 我需要从表中获取邮政编码 NW44JL 1 英里半径内的所有记录 谁能帮我得到这个 谢谢 D
  • 如何使用 javascript 检测 kindle fire?

    我正在尝试使用 javascript 检测我的网站是否在 kindle fire 移动设备上运行 我尝试过 navigator userAgent 和 navigator appVersion 但我在 kindle 上得到了这个结果 5 0
  • 当垂直回扫位被清除时,VGA 卡是否会读取像素缓冲区?

    我正在开发一款使用视频模式 13h 的 DOS 游戏 我一直遇到屏幕撕裂的问题 但直到今天我一直忽略这个问题 我认为修复这将是一个挑战 因为它将涉及延迟像素写入一段精确的时间 但这实际上是一个非常简单的修复 您所要做的就是等待重新设置 VG
  • 查看以识别分组值或对象

    举个例子 我有 5 个对象 对象是绑定在一起或彼此相邻的红点 换句话说 X 1 或 X 1 或 Y 1 或 Y 1 我需要创建一个 MS SQLVIEWwith 将包含每个对象的第一个 XY 坐标 例如 X Y 1 1 1 2 1 8 3
  • Android 实时数据观察器异常

    我正在尝试实现新的 Android 架构组件 并在片段和视图模型中使用了实时数据 但是当我向实时数据添加观察者时 应用程序崩溃并抛出此异常 Process com nrs nsnik architecturecomponents PID 3