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了,导致空指针异常.
好吧,原来是这个导致的,给自己提个醒吧。