2015-07-11 43 views
0

我有一個Activity,在ViewPager中使用了一些Fragments,有時用戶向我發送一些我不明白的崩潰報告。Android嘗試從空白對象上的字段讀取參考

我不能產生這個崩潰,大部分用戶都沒有問題。

崩潰日誌說:

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提前。

回答

0

這是可能的,有時Activity會被回收,當你在Fragment中調用getActivity()時,它將返回null。所以你打電話之前getActivity()你可以編寫如下代碼:

if (isAdded()) { 
     tView.setDefaultNodeClickListener(((MainActivity) getActivity()).nodeClickListener2); 
     ... 
    } 
+0

我以爲'片段'lifeCycle取決於託管活動。那是錯的嗎? – mehdok

+0

@mehdok片段實際上是一個視圖。 – rainash

+0

如果我使'nodeClickListener2'靜態?這個問題是否會再次發生? – mehdok

0

你在哪裏你的片段訪問您的活動領域?你應該從onAttach()開始直到onDetach()。

如果您嘗試在構造函數或片段的onCreate()中過早地訪問它,這將解釋崩潰。在片段從活動中分離之後嘗試訪問它時也是如此。

+0

在我的主要活動中,我有一個計算時間的方法,當它完成時,它會根據片段調用一個函數('fillViews')來填充它的視圖。在'fillViews'中,我將檢查空視圖(如果日期計算完成的速度比onCreateView'更快)。 – mehdok

+0

活動不應直接在片段上調用方法。片段應該在正確的時間提取所需的信息。 – BladeCoder

相關問題