关于使用volley加载数据,第一次没数据,第二次才出现数据问题。

 

问题描述:使用volley正常获取到了和后台数据,但是第一次进入时,数据不显示到ArrayList中,再次进入才显示数据。

原因:

使用debug模式调试发现setAdapter()写在了外部类中,代码执行时,先执行了内部类的部分,再执行外部类的setAdapter();

由于是先执行内部类的部分,所以第一次运行时,内部类添加的数据为空,只有在第一次执行完代码后,即内部类代码,外部类代码都执行完毕,第二次进入执行内部类的添加数据方法时,数据才不为空,才会显示数据;

代码如下:把这两行代码放入volley请求成功的回调函数中执行,这两行代码的作用是把实体类的数据传入目标列表;

PlayerAdapter adapter = new PlayerAdapter(playerList);
recyclerView.setAdapter(adapter);

完整代码如下:

 //请求接口
        String url = "http://www.gdsanhe.cn/gzkp/index.php?d=api&c=Player";
        VolleyRequestUtil.RequestGet(getActivity().getApplicationContext(), url, "listGet",
                new VolleyListenerInterface(getActivity().getApplicationContext(), VolleyListenerInterface.mListener,
                        VolleyListenerInterface.mErrorListener) {
                    // Volley请求成功时调用的函数
                    @Override
                    public void onMySuccess(String response) {
//                        Toast.makeText(getActivity().getApplicationContext(), response, Toast.LENGTH_SHORT).show();

                        JSONObject obj = JSONObject.parseObject(response);
                        JSONArray transitListArray = obj.getJSONArray("dataarray");
                        for (int i = 0; i < transitListArray.size(); i++) {
                            JSONObject tempObject = JSONObject.parseObject(transitListArray.getString(i));
//                            Toast.makeText(getActivity().getApplicationContext(),"Array:" + transitListArray.getString(i) + " ",Toast.LENGTH_SHORT).show();
                            Player _player = new Player(tempObject.getString("name"), "NO."+tempObject.getString("id"));
                                playerList.add(_player);
                            PlayerAdapter adapter = new PlayerAdapter(playerList);
                            recyclerView.setAdapter(adapter);

//                            Toast.makeText(getActivity().getApplicationContext(), playerList.toString(), Toast.LENGTH_SHORT).show();
                        }
                    }
                    // Volley请求失败时调用的函数
                    @Override
                    public void onMyError(VolleyError error) {
                        Toast.makeText(getActivity().getApplicationContext(), "网络请求出错!", Toast.LENGTH_SHORT).show();
                    }
                }, false);

动态加载跟静态加载不一样,如果是静态加载,可以把数据加载放在匿名内部类的外面,因为他不需要请求网络,可以直接显示在指定的listview上。

这个算是一个坑吧,没思路的话真的会搞死人,填一下0.0。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值