我目前正在为我的Android应用程序使用Retrofit 1.9.0。我开发了一个REST服务。为了从REST获取数据,我实现了以下代码。我想根据服务器端的ID字符串获取人员列表。
if(!ids.isEmpty()) {
retrofitService.getNewStaffInfo(ids, new Callback<List<StaffInfo>>() {
@Override
public void success(List<StaffInfo> staffInfos, Response response) {
System.out.println(staffInfos.size());
for (StaffInfo staff : staffInfos)
mStaffInfo.add(staff);
// update the local database
}
@Override
public void failure(RetrofitError error) {
System.out.println("error");
}
}
);
}
System.out.println(mStaffInfo.size());
然而,我的问题是,我得到了两次结果。第一次,结果列表的大小为零,但第二次,我得到的结果不正确。
如果有人有解决方案,我会很感激,为什么第一次列表结果的大小为零?
答案 0 :(得分:0)
使用回调时,回调中的代码在网络请求完成之前不会运行。同时,您的程序继续运行代码。在您的情况下,您启动呼叫,在完成之前尝试打印列表的大小。然后,当调用完成时,再次打印列表的大小。我在下面注释了问题。删除它只会打印一次正确的大小。
if(!ids.isEmpty()) {
retrofitService.getNewStaffInfo(ids, new Callback<List<StaffInfo>>() {
@Override
public void success(List<StaffInfo> staffInfos, Response response) {
System.out.println(staffInfos.size());
for (StaffInfo staff : staffInfos)
mStaffInfo.add(staff);
// update the local database
}
@Override
public void failure(RetrofitError error) {
System.out.println("error");
}
}
);
}
System.out.println(mStaffInfo.size()); <---- *** This line runs before the call back and prints out the zero size. Remove it.