从Back4App获取数据(Parse)

时间:2017-03-21 10:24:08

标签: android parse-platform back4app

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

任何帮助都将深受赞赏。

1 个答案:

答案 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.
            }
        }
    });