下面是我的网络请求代码,用的是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); } }); }
mCommonAdapter=new CommonAdapter(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()); } };
private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case Constants.REFRESHTYPE: mCommonAdapter.notifyDataSetChanged(); mIdNormallisviewBgarefreshlayout.endRefreshing(); isRefrshing = false; break; } } };
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 Listlist; public void setShop_size(int shop_size) { this.shop_size = shop_size; } public void setEarnings(double earnings) { this.earnings = earnings; } public void setList(List list) { this.list = list; } public int getShop_size() { return shop_size; } public double getEarnings() { return earnings; } public List 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; } } } }
试一试,在handler.sendMessage(),并且在Message里面把mDistributionShopsBean传递出去.....然后再handlerMessage获取list。很可能在你的mDistributionShopsBean没有传出去
Message m=new Message(); m.what=...; m.obj=mDistributionShopsBean; handler.sendMessage(m);
然后爱hanldeMessage中,
list.addAll(msg.obj);这里需要强转类型
notifyDataSetChanged更新的前提是数据更新,即传入的List数据有所变化,如果数据集合增加了是可用的,如果是修改了数据集合应该不太适用,因为手机屏幕已经加载部分可能不会重新加载,必须不可视后销毁重新创建后才会是更新的内容,可以使用setadapter,唯一的坏处是会返回到Listview顶部,可以在这之前记录listview的位置,然后再setadapter,再将listview设置到指定位置。而对于下拉刷新来说就不存在了,因为本来就在头部。