0

我正在使用 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
                       }
                       } 
                       }
                       });

任何帮助将不胜感激。

4

1 回答 1

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.
            }
        }
    });
于 2017-04-26T18:33:25.190 回答