2017-04-02 206 views
0

我有一個方法試驗(+),使用下面的Runnable和Handler decleration運行在主線程每3秒:吐司崩潰

private Runnable _checker = new Runnable() { 
    @Override 
    public void run() { 
    try { 
     test(); 
    } finally { 
     if (!_stopTest) { 
      _testHandler.postDelayed(_checker, 3000); 
     } 
    } 
    } 
}; 

此消息敬酒測試期間在主線程上運行()方法:

04-02 09:56:44.229 31232-31232/com.app E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference 
                    at android.widget.Toast.<init>(Toast.java:105) 
                    at android.widget.Toast.makeText(Toast.java:262) 
                    at com.BaseSupportFragment.test(BaseSupportFragment.java:916) 
01:

Toast.makeText(getActivity(), "Recalculating...", Toast.LENGTH_SHORT).show(); 

與異常結束了

在onBackPressed過程中發生異常,我重寫該消息以刪除片段容器(其中包含應顯示失敗的Toast消息的片段)。

有人知道這裏發生了什麼嗎?

+0

我想說的活性從片段脫落調用之前Toast.makeText所以上下文丟失,它會導致空指針異常 –

回答

1

onBackPressed時發生異常。

下一次getActivity()被稱爲返回null,因爲你的片段目前沒有連接到任何活動。因此崩潰發生。

onBackPress()你不得不取消計劃可運行:

_testHandler.removeCallbacks(_checker); 
+0

另外:附加條件,如果(! _stopTest)在調用test()之前是必需的。 – lionheart