Android用Gson解析json数据的刷新问题?
天蓬老师
天蓬老师 2017-04-17 16:00:34
[Android讨论组]

问题描述

下面是我的网络请求代码,用的是Okhttp,把返回的数据通过gson进行解析。
然后把解析出来的mDistributionShopsBean 内的List传给了ListView的适配器来显示。

当我想要刷新数据的时候,再次调用这个方法,然后给适配器notifyDataSetChanged()来刷新,但是我发现并没有刷新数据,好像这里的mDistributionShopsBean 并没有更新?
这是为什么?怎么弄才能让mDistributionShopsBean 刷新。

网络请求及数据解析

private void getData(final int type,int offset,String column,String sort) {
        String url=Constants.DISTRIBUTIONSHOPS+"?offset="+offset+"&limit=10"+"&column="+column+"&sort="+sort;

        OkHttpManager.getAsync(url, new OkHttpManager.DataCallback() {
            @Override
            public void requestFailure(Call call, IOException e) {
                Log.d("BankCardManageActivity", "接口连接失败");
            }

            @Override
            public void requestSuccess(String result) {
                Log.d("DistributionShopsActivi", result);
                //解析数据
                Gson gson = new Gson();
                mDistributionShopsBean = gson.fromJson(result, DistributionShopsBean.class);
                //初始化数据。
                handler.sendEmptyMessage(type);
            }
        });

    }

ListView的适配器。

mCommonAdapter=new CommonAdapter<DistributionShopsBean.DataEntity.ListEntity>(this, mDistributionShopsBean.getData().getList(), R.layout.item_distribution_shops) {
            @Override
            public void convert(ViewHolder holder, DistributionShopsBean.DataEntity.ListEntity listEntity) {
                holder.setImageURI(R.id.id_draweeView_icon, listEntity.getImg());
              
            }
        };

Handler

 private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {         
                case Constants.REFRESHTYPE:
                    mCommonAdapter.notifyDataSetChanged();
                    mIdNormallisviewBgarefreshlayout.endRefreshing();
                    isRefrshing = false;
                    break;
               
            }
        }
    };

DistributionShopsBean

public class DistributionShopsBean {

    /**
     * code : 0
     * data : {"shop_size":2,"earnings":225.55,"list":[{"id":18,"merchant_id":3,"shop_id":3,"team_size":0,"commission":"3.00","img":"","name":"API测试"},{"id":1,"merchant_id":1,"shop_id":1,"team_size":3,"commission":"222.55","img":"2015/11/24/FpVvQPAwOf0SODPRMOd1YZnb22vU.png","name":"微巴人人店DEMO"}]}
     */

    private int code;
    /**
     * shop_size : 2
     * earnings : 225.55
     * list : [{"id":18,"merchant_id":3,"shop_id":3,"team_size":0,"commission":"3.00","img":"","name":"API测试"},{"id":1,"merchant_id":1,"shop_id":1,"team_size":3,"commission":"222.55","img":"2015/11/24/FpVvQPAwOf0SODPRMOd1YZnb22vU.png","name":"微巴人人店DEMO"}]
     */

    private DataEntity data;

    public void setCode(int code) {
        this.code = code;
    }

    public void setData(DataEntity data) {
        this.data = data;
    }

    public int getCode() {
        return code;
    }

    public DataEntity getData() {
        return data;
    }

    public static class DataEntity {
        private int shop_size;
        private double earnings;
        /**
         * id : 18
         * merchant_id : 3
         * shop_id : 3
         * team_size : 0
         * commission : 3.00
         * img :
         * name : API测试
         */

        private List<ListEntity> list;

        public void setShop_size(int shop_size) {
            this.shop_size = shop_size;
        }

        public void setEarnings(double earnings) {
            this.earnings = earnings;
        }

        public void setList(List<ListEntity> list) {
            this.list = list;
        }

        public int getShop_size() {
            return shop_size;
        }

        public double getEarnings() {
            return earnings;
        }

        public List<ListEntity> getList() {
            return list;
        }

        public static class ListEntity {
            private int id;
            private int merchant_id;
            private int shop_id;
            private int team_size;
            private String commission;
            private String img;
            private String name;

            public void setId(int id) {
                this.id = id;
            }

            public void setMerchant_id(int merchant_id) {
                this.merchant_id = merchant_id;
            }

            public void setShop_id(int shop_id) {
                this.shop_id = shop_id;
            }

            public void setTeam_size(int team_size) {
                this.team_size = team_size;
            }

            public void setCommission(String commission) {
                this.commission = commission;
            }

            public void setImg(String img) {
                this.img = img;
            }

            public void setName(String name) {
                this.name = name;
            }

            public int getId() {
                return id;
            }

            public int getMerchant_id() {
                return merchant_id;
            }

            public int getShop_id() {
                return shop_id;
            }

            public int getTeam_size() {
                return team_size;
            }

            public String getCommission() {
                return commission;
            }

            public String getImg() {
                return img;
            }

            public String getName() {
                return name;
            }
        }
    }
}
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
ringa_lee

notifyDataSetChanged更新的前提是数据更新,即传入的List数据有所变化,如果数据集合增加了是可用的,如果是修改了数据集合应该不太适用,因为手机屏幕已经加载部分可能不会重新加载,必须不可视后销毁重新创建后才会是更新的内容,可以使用setadapter,唯一的坏处是会返回到Listview顶部,可以在这之前记录listview的位置,然后再setadapter,再将listview设置到指定位置。而对于下拉刷新来说就不存在了,因为本来就在头部。

高洛峰

试一试,在handler.sendMessage(),并且在Message里面把mDistributionShopsBean传递出去.....然后再handlerMessage获取list。很可能在你的mDistributionShopsBean没有传出去

Message m=new Message();
m.what=...;
m.obj=mDistributionShopsBean;
handler.sendMessage(m);

然后爱hanldeMessage中,

list.addAll(msg.obj);这里需要强转类型

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号