Android试图读取空对象引用上的字段
我有一个Android试图读取空对象引用上的字段,android,Android,我有一个活动,其中有一些片段用于查看页面,有时用户会向我发送一些我不理解的崩溃报告 我不能产生这种崩溃,大多数用户根本没有问题 事故日志显示: java.lang.NullPointerException: Attempt to read from field 'com.mehdok.views.treeview.TreeNode$TreeNodeClickListener com.mehdok.mafatih.MainActivity.nodeClickListener2' on a null
活动
,其中有一些片段
用于查看页面
,有时用户会向我发送一些我不理解的崩溃报告
我不能产生这种崩溃,大多数用户根本没有问题
事故日志显示:
java.lang.NullPointerException: Attempt to read from field 'com.mehdok.views.treeview.TreeNode$TreeNodeClickListener com.mehdok.mafatih.MainActivity.nodeClickListener2' on a null object reference
nodeClickListener2
是我的主要活动:
public TreeNode.TreeNodeClickListener nodeClickListener2 = new TreeNode.TreeNodeClickListener()
{
@Override
public void onClick(TreeNode node, Object value)
{
TreeViewHolderNoBorder.TreeViewItem item = (TreeViewHolderNoBorder.TreeViewItem) value;
if(node.isLeaf() && !item.nodeNavUri.equals(""))
{
openNodePage2(item);
}
}
};
在fragmets中,我是这样使用它的:
tView.setDefaultNodeClickListener(((MainActivity) getActivity()).nodeClickListener2);
我能做些什么来防止这次撞车
tnx提前。这是可能的,有时活动会被回收,当您在片段中调用
getActivity()
时,它将返回null。因此,在调用getActivity()
之前,您可以编写如下代码:
if (isAdded()) {
tView.setDefaultNodeClickListener(((MainActivity) getActivity()).nodeClickListener2);
...
}
您从片段的何处访问活动字段?您应该从onAttach()开始,一直到onDetach()
如果您试图在构造函数或片段的onCreate()中过早地访问它,这将解释崩溃的原因。如果您尝试在片段与活动分离后访问它,也是如此。我认为
fragment
生命周期取决于托管活动。错了吗?@mehdok Fragment实际上是一个视图。如果我将nodeClickListener2
static怎么办?这个问题可能会再次发生吗?@mehdok问题会再次发生,按照我在回答中写的做这可以防止崩溃,但是如果如果语句变为false
,那么应用程序将无法正常工作。在我的主要活动中,我有一个计算时间的方法,当它完成时,会调用一个函数(fillViews
)从片段填充基于此日期的视图。在fillViews
中,我将检查空视图(如果调用片段onCreateView
的日期计算速度更快)。活动不应直接对片段调用方法。片段应该在正确的时间提取它需要的信息。