如下,大概写了点逻辑,为什么在volley里面获取的数据,赋值给datas,可是当:private List<ItemsBean.StoriesEntity> datas;时,程序能进入,但一片空白,说明datas没数据传入;当List<ItemsBean.StoriesEntity> datas=null;程序崩溃,Adapter里面的getCount()空指针.......
如何处理这种情况呢?debug,volley的数据正常啊,能获取的。
public class MainActivity extends AppCompatActivity {
private List<ItemsBean.StoriesEntity> datas;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case LOADFINSH:
listView.setAdapter(new CommonAdapter<ItemsBean.StoriesEntity>(datas, MainActivity.this, R.layout.main_item_layout) {
......................
}
default:
break;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getDataFromJson()
}
public void getDataFromJson() {
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
StringRequest request = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
ItemsBean allData = JSON.parseObject(s, ItemsBean.class);
//在这里赋值为什么上面的setAdapter获取不到呢?
datas = allData.getStories();
handler.sendEmptyMessage(LOADFINSH);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.i("wrongMessage:", volleyError.getMessage());
}
});
queue.add(request);
}
}
后来,我在handle里面用message把datas发到上面去,就没问题。但是究竟那个问题在什么地方呢?难道在子线程不能给datas赋值吗??我需要用到datas作为全局变量啊...
我也是, 把数据获得到了后,在适配器的绑定数据的时候崩溃了.linktreemap这个数组难道不能直接得到bean类?
线程同步的问题,volley网络请求是个异步操作,数据不是实时返回的,所以在getDataFromJson后面直接调 setAdapter , datas 根本就还没有数据,当然显示空了。用 handler去做这个工作就是避免了这个问题。把 datas 作为全局变量也可以,你在 onResponse时调 adapter.notifyDataSetChanged()。多学习学习多线程基础吧。