gpt4 book ai didi

android - Parse.com Android public void done 没有正确返回我的 ArrayList

转载 作者:行者123 更新时间:2023-11-30 01:39:12 25 4
gpt4 key购买 nike

我想用从 Parse 查询返回的结果填充 ArrayList。当我得到结果时,我将它们添加到 ArrayList 并将 ArrayList 大小打印到控制台以确保添加了结果,这是成功的,但是当我返回 ArrayList 时它是空的。谁能向我解释为什么会这样?

public ArrayList<ParseObject>findAllGroupByUserId(ParseUser userId){
//TODO hier uit db halen alle groupen van user
final ArrayList<ParseObject> groups = new ArrayList<>();
ParseQuery<Group_user> query = ParseQuery.getQuery("Group_user");
query.whereEqualTo("user_id", userId);
query.findInBackground(new FindCallback<Group_user>() {
@Override
public void done(List<Group_user> objects, ParseException e) {
if (e == null) {
for (Group_user group : objects) {
Log.e("SUCCESS", group.getObjectId() + " , " + group.getGroup_id().getObjectId());
ParseObject g = new Group();
groups.add(g);

}
System.out.println(groups.size() + " :Done method"); //THIS RETURNS 2
} else {
Log.e("ERROR", "message: " + e);
}
Log.e("SUCCESS", "we have " + groups.size() + " results");
}
});
System.out.println(groups.size() + " :return"); // THIS RETURNS 0
return groups;
}

最佳答案

因为 findInBackground() 在不同的线程上异步运行。您需要执行 done() 回调中的剩余逻辑以获取填充的数组。

可以这样想:

线程 1 -> 调用 findInBackground() -> 线程 1 正在运行 ----------> 在线程 2 完成之前组为空

线程 2 生成 -> 连接到服务器并获取查询结果 -> 在线程 1 上调用完成回调(现在您已准备好数据)

关于android - Parse.com Android public void done 没有正确返回我的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34728177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com