Android用Gson解析json数据的刷新问题?

查看:231
本文介绍了Android用Gson解析json数据的刷新问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

问题描述

下面是我的网络请求代码,用的是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;
            }
        }
    }
}

解决方案

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

这篇关于Android用Gson解析json数据的刷新问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆