[英]Android Attempt to read from field on a null object reference
I have an Activity
with some Fragments
used in a ViewPager
, sometimes user sends me some crash report that i don't understand. 我有一个Activity
的一些Fragments
在使用ViewPager
,有时用户发送我有些崩溃报告,我不明白。
I can not produce this crash and most of the user have no problem at all. 我无法发生此崩溃,并且大多数用户完全没有问题。
The crash Log says: 崩溃日志中说:
java.lang.NullPointerException: Attempt to read from field 'com.mehdok.views.treeview.TreeNode$TreeNodeClickListener com.mehdok.mafatih.MainActivity.nodeClickListener2' on a null object reference
The nodeClickListener2
is in my main activity: 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);
}
}
};
And in fragmets i use it like this: 在碎片中,我像这样使用它:
tView.setDefaultNodeClickListener(((MainActivity) getActivity()).nodeClickListener2);
What can i do to prevent this crash? 我该怎么做以防止此崩溃?
tnx in advance. 提前发送。
That is possible, sometimes Activity will be recycled, when you call getActivity()
in Fragment, it will return null. 这是可能的,有时Activity将被回收,当您在Fragment中调用getActivity()
时,它将返回null。 so before you call getActivity()
you can write code as below: 因此,在调用getActivity()
,可以编写如下代码:
if (isAdded()) {
tView.setDefaultNodeClickListener(((MainActivity) getActivity()).nodeClickListener2);
...
}
Where do you access your activity field from your fragment? 您从哪里访问片段中的活动字段? You should do it starting from onAttach() up until onDetach(). 您应该从onAttach()到onDetach()开始执行此操作。
If you try to access it too soon like in your constructor or in your fragment's onCreate(), this would explain the crash. 如果您试图像在构造函数中或片段的onCreate()中那样过早地访问它,这将解释崩溃。 Same if you try to access it after the fragment is detached from the Activity. 如果您将片段从活动中分离后尝试访问它,则相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.