在一个循环中访问网络获取Json数据,在回调函数中解析Json数据并给适配器赋值,在RecycleView中显示数据,结果发现只能显示最后的一项数据,也就是没有显示4项数据,跟踪回调函数内部,发现只执行了一次。请问该如何处理呢?
代码:
for (int i = 0; i < 4; i ++) {
            OneNetApi.setAppKey(KeyList.get(i));
            OneNetApi.querySingleDevice(IDList.get(i), new OneNetApiCallback() {  // 回调函数
                @Override
                public void onSuccess(String response) {
                    JsonObject resp = new JsonParser().parse(response).getAsJsonObject();
                    int errno = resp.get("errno").getAsInt();
                    if (0 == errno) {
                        mDeviceItems.add(resp.get("title").getAsString());
                        mAdapter.setNewData(mDeviceItems);
                    }
                }                @Override
                public void onFailed(Exception e) {
                    ……
                }

解决方案 »

  1.   

    这个肯定有4次请求,你可以打印一下4次返回的结果,你适配器里setNewData(mDeviceItems)方法怎么写的,我怀疑你是直接赋值的,不是add的
      

  2.   

    请求是4次没错,但是请求是在主线程中执行的,基本没有时间间隔,所以在query的时候,一看有有请求就直接cancel了上次的请求,因此就只会有最后一次的请求。我不明白为什么一个list的数据需要请求4次,这是超烂的设计。非要这么写的话,可以增加请求的间隔,等上一个请求结束了再开始第二个,方法的话有很多种,计数器,变量啥的都可以。