启动OrderScreen时调用CoffeeViewModel.getAllOrders()空指针异常如何修复
问题修复方案
错误根源
崩溃日志明确指向空指针异常:OrderScreen中声明的CoffeeViewModel类型变量coffeeViewModel仅完成了声明,没有做初始化操作就直接调用了getAllOrders()方法,触发空引用崩溃。
修复步骤
在OrderScreen的onCreate方法中,调用coffeeViewModel.getAllOrders()之前添加ViewModel初始化代码即可:
// CoffeeViewModel继承了AndroidViewModel,需要用Application级别的Factory完成实例化 coffeeViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())).get(CoffeeViewModel.class);
参考插入位置:
this.binding.recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); // 此处插入上面的初始化代码 coffeeViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())).get(CoffeeViewModel.class); this.coffeeViewModel.getAllOrders().observe(this, new Observer<List<Coffee>>() { // 原有逻辑保持不变 });
额外优化建议
当前的更新、删除咖啡逻辑是通过咖啡类型、大小、数量匹配记录,如果数据库中存在多条属性完全相同的咖啡记录,会出现误改/误删的问题。建议给Coffee实体类添加自增主键ID字段,后续增删改查都通过ID匹配记录,稳定性更高。
内容的提问来源于stack exchange,提问作者anlelya_black
相关产品推荐
相关产品推荐

