Java 尝试访问ExpandableListAdapter的DialogInterface.OnClickListener内的数据库时出现NullPointerException
我有一个可扩展的列表适配器,每个类别下都有类别和项目。如果单击以删除项目,将弹出一个确认删除的警报对话框。当我按下Java 尝试访问ExpandableListAdapter的DialogInterface.OnClickListener内的数据库时出现NullPointerException,java,android,sql,android-alertdialog,Java,Android,Sql,Android Alertdialog,我有一个可扩展的列表适配器,每个类别下都有类别和项目。如果单击以删除项目,将弹出一个确认删除的警报对话框。当我按下yes时,调试器总是在dbHelper.deleteItemizedExpensing处停止,并带有NullPointerException。我在deleteItemizedExpensing中设置了一个断点,但它没有输入fn 数据库已初始化,并已在主活动中打开以进行写入。我还检查了参数组。类别名称,子项。行id,子项。项目金额均有效。这里有什么问题 文件ExpandableCate
yes
时,调试器总是在dbHelper.deleteItemizedExpensing
处停止,并带有NullPointerException
。我在deleteItemizedExpensing
中设置了一个断点,但它没有输入fn
数据库已初始化,并已在主活动中打开以进行写入。我还检查了参数组。类别名称
,子项。行id
,子项。项目金额
均有效。这里有什么问题
文件ExpandableCategoryListAdapter.java(仅复制相关代码):
堆栈跟踪:
DalvikVM[localhost:8603]线程[main](挂起(异常NullPointerException))
ExpandableCategoryListAdapter$1$1.onClick(DialogInterface,int)行:70
AlertController$ButtonHandler.handleMessage(消息)行:167
AlertController$ButtonHandler(处理程序)。dispatchMessage(消息)行:99
Looper.loop()行:137 ActivityThread.main(字符串[])行:4950
调用(对象,对象[],类,类[],类,整数,布尔值)行:不可用[本机方法]
调用(对象,对象…)行:511
ZygoteInit$MethodAndArgsCaller.run()行:1004 颧骨单位。主(字符串[])行:771 NativeStart.main(字符串[])行:不可用[本机方法]
螺纹[Binder_2](运行)
螺纹[Binder_1](运行) 螺纹[Binder_3](运行)
变量dbHelper未初始化
private DbHelper dbHelper;
这条线坏了
dbHelper.deleteItemizedSpending(group.category_name, children.row_id, children.item_amount);
我不是专家,但你可能会说它在这里不起作用。请尝试:ExpandableCategoryListAdapter.this.notifyDataSetChanged()在活动中初始化但不在ListAdapter中的标题…,如果要使用该变量,请传递对Activity变量的引用,或者将其设置为singleton,获取ListAdapter中的实例,但我已经从将ExpandableListAdapter设置为ExpandableListView的活动中初始化了dbHelper:在创建该活动时,我有'dbHelper=new dbHelper(this);'以及“dbHelper.open()”是否需要再次初始化它?另外,由此产生的一个问题是,由于构造函数DbHelper()调用Database()构造函数来创建所有数据库表,当我再次调用DbHelper()来初始化变量时,是否会创建重复的表?ListAdapter无法知道DbHelper属性与活动的DbHelper属性相同。。。每个类都是封装的,无法知道其他类的属性…,您应该使用上下文或使用类似dbHelper getInstance()的方法将dbHelper传递给ListAdapter{if(dbHelper==null){dbHelper=new dbHelper();}return dbHelper;}返回相同的实例,然后您可以在不同的位置使用相同的DB实例
private DbHelper dbHelper;
dbHelper.deleteItemizedSpending(group.category_name, children.row_id, children.item_amount);