由于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
”的本地缓存中多次递增/取消编码。如果由于任何原因终止方法保存,则计数器值将是错误的!!
答案 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!
}
}
});