Android NullPointerException on getActivity().runOnUiThread

 

报错代码如下:

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还是报空指针),希望大神可以不吝赐教......

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值