Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试访问ExpandableListAdapter的DialogInterface.OnClickListener内的数据库时出现NullPointerException_Java_Android_Sql_Android Alertdialog - Fatal编程技术网

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);