2017-04-02 202 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