天天看点

ListView的空指针崩溃ListView的空指针崩溃

ListView的空指针崩溃

一、问题情况:

某个类中调用getDataFromServer(),来获取数据news,adapter中根据news决定条目数量,然后就奔溃啦,提示空指针。

public void initData() {
        String cache = CacheUtil.getCache(mActivity, mTabDetailUrl);
        if (!TextUtils.isEmpty(cache)) {
            processData(cache);
        }

        getDataFromServer();
        //listView.setAdapter  为什么这里会奔溃?news空指针?明明上面请求网络数据了啊?
        //请求网络为异步GET请求,onSuccess还没执行时,就已经执行setAdapter了,导致空指针异常
        //SystemClock.sleep(1000);
        listView.setAdapter(new LvAdapter());
    }
           
private void getDataFromServer() {
        RequestParams params = new RequestParams(mTabDetailUrl);
        x.http().get(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                //获取数据news--就是这东西导致Adapter中空指针
            }
    }
           
private class LvAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return news.size();			//这里空指针
        }
}
           

二、原因分析

一开始找了半天原因没发现到底为什么会出现这样的问题,明明有数据的啊?emmm,费了老大劲试到在xUtils3的网络请求中onSuccess中打个Log,发现奔溃时Log根本没打,才觉得为什么没走onSuccess方法啊?后来点进源码一看才发现是异步GET请求。

请求网络为异步GET请求,onSuccess还没执行时,就已经执行下面的setAdapter了,导致空指针异常.

好吧,原来是这个导致的,给自己提个醒吧。

继续阅读