Android - 延迟从Parse Query获取值

时间:2015-08-12 07:41:22

标签: android parse-platform firebase parse-android-sdk

您好我正在使用Parse和Firebase构建聊天应用程序,用户详细信息在Parse中维护,聊天正在Firebase上运行。

因为每次用户开始与某人聊天时,都必须去Parse" Recent" - 类,它必须检查Arraylist匹配,如果行包含匹配,那么它必须返回一个预期值,我将保存在共享首选项中,否则我们在代码本身创建一个值并保存它的首选项。

我的问题是什么...... 实际上Parse查询工作正常并且它第一次立即传递预期值,但是下一次(如果你回去并选择另一个聊天的用户),它从共享首选项中获取先前的值,然后执行Parse查询,因​​为解析线程正在后台执行所以需要花费时间。因此,第二次聊天也保存在之前的值中。我只是想立即从解析查询中获取值并保存它。但我不知道该怎么做。

// get result from query
        $result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));

        // get infos for all columns
        $columnInfos = mysqli_fetch_fields($result);


        // create an array
        $resArray = array();
        while($row = mysqli_fetch_assoc($result)) {
            foreach ($columnInfos as $info) {
                $row[$info->name] = utf8_encode($row[$info->name]);
            }
            $resArray[] = $row;
        }

        echo json_encode($resArray, JSON_UNESCAPED_UNICODE);

任何人都可以告诉我如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

披露:我为Firebase工作

我之前从未使用过Parse,但与大多数现代互联网一样,它可能异步加载数据。这意味着,当Parse加载完数据时,您应该只尝试从Firebase加载数据。

您可以通过将从Firebase 加载的代码移动到执行Parse数据已加载的回调来执行此操作:

groupIdQuery = ParseQuery.getQuery("Recent");
groupIdQuery.whereContainsAll("members", Arrays.asList(user1ObjectId, user2ObjectId));
Log.d("objectArray", Arrays.asList(user1ObjectId, user2ObjectId).toString());
groupIdQuery.findInBackground(new FindCallback<ParseObject>() {
    @Override
    public void done(List<ParseObject> list, ParseException e) {
        if (e == null && list.size() != 0) {
            for (ParseObject dealsObject : list) {
                recentClassObjectId = dealsObject.getObjectId();
                groupId = (String) dealsObject.get("groupId");
            }
        } else {
            groupId = user1ObjectId + user2ObjectId;
        }
        mFirebaseRef = new Firebase(FIREBASE_URL).child(groupId);
        mFirebaseRef.setValueEventListener... 
    }
});

请注意,我删除了与实际问题无关的所有代码,以便更容易看到该流程。