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我认为这不是正确的方法。参考这个答案