如何知道ParseRelation(Parse / Android)的大小?

时间:2016-08-10 08:24:12

标签: android parse-platform

由于ParseRelation可以有大量的行,是否有一种高效的方法来获取这些行的数量?
对于大尺寸我不能简单地查询所有列表并获得大小。 在Parse SDK文档中,当超过1000个对象时,建议不要使用query. countInBackground。 那么如何查询这个大小呢?

[编辑] :如果我为ParseRelation增加专用计数器,则可能出现问题:

让我们说在android上我会显示一个项目列表,其中包含一个单击"addToRelation"的按钮。 仅当关系尚未完成时,此按钮才可见。这意味着我需要首先检查每个项目是否属于该关系。 然后,当用户点击几个按钮时,我调用每个后端方法来添加关系并递增计数器。 (这已经提出了很多Parse请求) 现在假设由于一些错误的缓存同步,在该项目的关系已存在时启用了按钮“addToRelation”。 如果我打电话给方法:

obj.add("relations",relation);
// increment the relations count by using the increment function
obj.increment("relationsCount");
obj.saveInBackground(. . .) 

该方法不会崩溃(我测试过,如果你添加两次相同的关系,没有任何反应) 但计数器将递增+1!

为了避免这种情况,我需要检查每个项目两次,如果它们尚未关联。这会创建太多冗余的远程请求。
那么如何避免这种情况?

另一个问题可能是 当我使用saveEventually并且该方法无声地失败时发生;因此,如果用户重复多次操作,计数器将在“saveEventually”的本地缓存中多次递增/取消编码。如果由于任何原因终止方法保存,则计数器值将是错误的!!

1 个答案:

答案 0 :(得分:1)

您可以做的是创建名称为 realtionCount 的其他字段(或根据您的关系名称设置其他字段)。此字段将为整数,然后每次创建新对象时,都可以使用increment选项递增此字段。因此,您的代码应如下所示:

    // create new relation
    final ParseObject relation = new ParseObject("your_relation_class_name");
    relation.put("{RELATION_KEY_FIELD_NAME}","{RELATION_FIELD_VALUE}");
    // add the relation to the parent object
    obj.add("relations",relation);
    // increment the relations count by using the increment function
    obj.increment("relationsCount");
    obj.saveInBackground(new SaveCallback() {
        @Override
        public void done(ParseException e) {
            if (e == null){
                // object saved!
            }
        }
    });