Java 获取info.targetView上的null异常
我目前正在尝试制作上下文菜单。我希望上下文菜单能够从生成菜单的视图中捕获文本。这是我正在使用的代码:Java 获取info.targetView上的null异常,java,android,Java,Android,我目前正在尝试制作上下文菜单。我希望上下文菜单能够从生成菜单的视图中捕获文本。这是我正在使用的代码: @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuIn
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info =
(AdapterView.AdapterContextMenuInfo) menuInfo;
selectedOption = ((TextView) info.targetView).getText().toString();
menu.setHeaderTitle(selectedOption);
}
执行应用程序时,我遇到以下错误:
Caused by: java.lang.NullPointerException: Attempt to read from field 'android.view.View android.widget.AdapterView$AdapterContextMenuInfo.targetView' on a null object reference
at com.conversions.rolando.conversions.MainActivity.onCreateContextMenu(MainActivity.java:172)
…它指向:selectedOption=((TextView)info.targetView).getText().toString()代码>
所以这个错误基本上意味着“info”是空的,因为“menuInfo”也是空的?。我试图通过阅读来理解原因:但似乎无法找到解决方案,也无法理解问题所在
这就是我调用registerForContextMenu()的方法。
:
my main.xml中的TextView正在调用此方法
谢谢大家! 您似乎理解这个问题:
info
是null
,因为menuInfo
是null
。您正在尝试取消引用info
。也就是说,访问null
对象上的字段。由于对象不存在(即为null
),因此该字段不能存在且不得使用。Java运行时已检测到此取消引用null
,并正在引发相关异常,即NullPointerException
为避免此错误,在尝试访问其字段之前,应检查info
是否为null
,例如:
if (info != null) {
selectedOption = ((TextView) info.targetView).getText().toString();
menu.setHeaderTitle(selectedOption);
}
您似乎理解这个问题:
info
是null
,因为menuInfo
是null
。您正在尝试取消引用info
。也就是说,访问null
对象上的字段。由于对象不存在(即为null
),因此该字段不能存在且不得使用。Java运行时已检测到此取消引用null
,并正在引发相关异常,即NullPointerException
为避免此错误,在尝试访问其字段之前,应检查info
是否为null
,例如:
if (info != null) {
selectedOption = ((TextView) info.targetView).getText().toString();
menu.setHeaderTitle(selectedOption);
}
android总是将参数
menuInfo
传递为null,这可能是因为您应该调用某个registerForContextMenu()
方法解释的参数menuInfo
总是被android传递为null,这可能是因为您应该调用某个registerForContextMenu()
方法说明感谢您的回答,dave。我已经添加了您建议的部分,但我不能做任何事情,因为信息始终为空,我不能使用“targetview”,这是我真正需要的,以使菜单按我想要的方式工作。@RolandoCorrea没问题,很乐意帮助。如果info总是null,那是因为menuInfo总是以null的形式到达方法中。我不知道为什么会这样,尽管BLACKVVINE的回答可能会有所帮助。我补充了BLACKVVINE的建议,但没有解决问题。谢谢你的回答dave。我已经添加了您建议的部分,但我不能做任何事情,因为信息始终为空,我不能使用“targetview”,这是我真正需要的,以使菜单按我想要的方式工作。@RolandoCorrea没问题,很乐意帮助。如果info总是null,那是因为menuInfo总是以null的形式到达方法中。我不知道为什么会这样,尽管BLACKVVINE的回答可能会有所帮助。我补充了BLACKVVINE的建议,但没有解决问题。谢谢你的回答dave。我已经添加了您建议的部分,但我不能做任何事情,因为信息始终为空,我不能使用“targetview”,这是我真正需要的,以使菜单按我想要的方式工作。@RolandoCorrea没问题,很乐意帮助。如果info总是null,那是因为menuInfo总是以null的形式到达方法中。我不确定为什么会这样,尽管BLACKVVINE的答案可能会有所帮助。我添加了BLACKVVINE的建议,但没有解决问题。我添加了调用registerForContextMenu()的代码部分。@RolandoCorrea我认为这不是正确的方法。参考这个答案,我在代码中添加了调用registerForContextMenu()的部分。@RolandoCorrea我认为这不是正确的方法。参考这个答案,我在代码中添加了调用registerForContextMenu()的部分。@RolandoCorrea我认为这不是正确的方法。参考这个答案