关于android for循环中的回调函数处理问题

dpbug_cn 2019-08-14 04:45:40
在一个循环中访问网络获取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) {
……
}
...全文
247 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Robin.Zhao 2019-08-14
  • 打赏
  • 举报
回复
请求是4次没错,但是请求是在主线程中执行的,基本没有时间间隔,所以在query的时候,一看有有请求就直接cancel了上次的请求,因此就只会有最后一次的请求。我不明白为什么一个list的数据需要请求4次,这是超烂的设计。非要这么写的话,可以增加请求的间隔,等上一个请求结束了再开始第二个,方法的话有很多种,计数器,变量啥的都可以。
zhang106209 2019-08-14
  • 打赏
  • 举报
回复
这个肯定有4次请求,你可以打印一下4次返回的结果,你适配器里setNewData(mDeviceItems)方法怎么写的,我怀疑你是直接赋值的,不是add的

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧