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
的日期计算速度更快)。活动不应直接对片段调用方法。片段应该在正确的时间提取它需要的信息。