首页 > volley里面给arrayList赋值,setAdapter为何获取不到,崩溃?

volley里面给arrayList赋值,setAdapter为何获取不到,崩溃?

如下,大概写了点逻辑,为什么在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()。多学习学习多线程基础吧。

【热门文章】
【热门文章】