报错代码如下:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.runOnUiThread(java.lang.Runnable)' on a null object reference
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
vp_banner.setCurrentItem(vp_banner.getCurrentItem() + 1);
}
});
显然是getActivity为空了(线程还没结束的时候退出了Activity,Activity虽然退出了,但在Activity里开的线程还在执行,当执行到getActivity().runOnUiThread的时候,由于Activity已经退出了,这时候,getActivity().runOnUiThread显然是要报空指针错误的),这里的具体的操作是点击切换语言的时候,会重新启动回到首页,首页的轮播图报空指针,这是由于当线程结束时activity变得不可见,getActivity()有可能为空,需要提前判断:
// 往下跳一位
if(getActivity()!=null){
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
vp_banner.setCurrentItem(vp_banner.getCurrentItem() + 1);
}
});
}
if (getActivity() == null)
return;
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
当然,这是最简单的方法,虽然解决了问题,但是我觉得不是最好的方法(有可能判断getActivity()的时候,Activity没退出,所以还不是空,但恰巧判断完后,Activity退出了(虽然这种概率很低,但也存在),那判断语句后的getActivity().runOnUiThread还是报空指针),希望大神可以不吝赐教......