我正在使用Back4App(Parse)构建应用程序。
我有两张桌子和媒体。 我必须获取与post_id相对应的媒体(单个或多个)。
所以,我使用以下方法: 首先,我从Post表中获取了所有帖子并保存在ArrayList中。 然后使用for循环,我从ArrayList获取特定的post_id并将其发送到媒体查询以查找该post_id的媒体。
但是,我的问题是查询是异步的,因为for循环在查询之前运行,稍后会获取查询结果。 for循环在查询之前运行,直到ArrayList大小。我该如何纠正这个问题。
我使用以下方法:
for (int i = 0; i < listUserPosts.size(); i++) {
String postId = listUserPosts.get(i).getPostId();
ParseQuery<ParseObject> query = ParseQuery.getQuery("Media");
query.whereEqualTo("post_id", postId);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
if (objects.size() > 0) {
for (int j = 0; j < objects.size(); j++)
{
ParseObject parseObject = objects.get(j);
//fetching data from parseObject
}
}
}
});
任何帮助都将深受赞赏。
答案 0 :(得分:1)
我不明白你究竟需要做什么,但我想你的挑战是要知道什么时候你完成了所有媒体的提取。所以你需要这样的东西:
for (int i = 0; i < listUserPosts.size(); i++) {
String postId = listUserPosts.get(i).getPostId();
ParseQuery<ParseObject> query = ParseQuery.getQuery("Media");
query.whereEqualTo("post_id", postId);
query.findInBackground(new FindCallback<ParseObject>() {
private int currentI = i;
@Override
public void done(List<ParseObject> objects, ParseException e) {
if (objects.size() > 0) {
for (int j = 0; j < objects.size(); j++)
{
ParseObject parseObject = objects.get(j);
//fetching data from parseObject
}
}
if (currentI + 1 == listUserPosts.size()) {
// It is finished. Do whatever you have to do here.
}
}
});