问题描述
下面是我的网络请求代码,用的是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设置到指定位置。而对于下拉刷新来说就不存在了,因为本来就在头部。