防止重复条目parse.com

时间:2014-01-26 08:48:58

标签: android parse-platform

我正在使用Parse.com作为我的后端,而似乎有一种方法saveInBackgroundWithBlock,以防止重复输入。它似乎不存在于Android上。我只想上传唯一的条目,但无法找到一种方法。

我能想到的唯一一件事是查询然后插入如果条目不存在,但是这样做了两倍的网络调用,我觉得它需要。

谢谢

2 个答案:

答案 0 :(得分:3)

正如我之前在评论中所提到的,我遇到了同样的问题。结束编写查询以查找现有对象,然后仅保存不存在的对象。如下所示。

//假设你有一个ParseObjects列表..这个列表包含现有对象和新对象。

List<ParseObject> allObjects = new ArrayList<ParseObject>();
allObjects.add(object); //this contains the entire list of objects.

你想通过使用字段ids来找出现有的。

//First, form a query
ParseQuery<ParseObject> query = ParseQuery.getQuery("Class");
query.whereContainedIn("ids", allIds); //allIds is the list of ids

List<ParseObject> Objects = query.find();  //get the list of the parseobjects..findInBackground(Callback) whichever is suitable

for (int i = 0; i < Objects.size(); i++)
      existingIds.add(Objects.get(i).getString("ids"));

List<String> idsNotPresent = new ArrayList<String>(allIds);
idsNotPresent.removeAll(existingIds);

//Use a list of Array objects to store the non-existing objects
List<ParseObject> newObjects = new ArrayList<ParseObject>();

for (int i = 0; i < selectedFriends.size(); i++) {
     if (idsNotPresent.contains(allObjects.get(i).getString(
                        "ids"))) {
     newObjects.add(allObjects.get(i)); //new Objects will contain the list of only the ParseObjects which are new and are not existing.
    }
}

//Then use saveAllInBackground to store this objects

ParseObject.saveAllInBackground(newObjects, new SaveCallback() {

    @Override
    public void done(ParseException e) {
    // TODO Auto-generated method stub
    //do something
        }
    });

我还尝试在beforeSave上使用ParseCloud方法。您可能知道,在保存对象之前,此方法在ParseCloud上调用,非常适合进行任何验证。但是,它并没有很好地运行。如果您需要ParseCloud代码中的内容,请与我们联系。

希望这有帮助!

答案 1 :(得分:0)

我不确定我理解你的问题,但你可以在Android中获得与saveInBackgroundWithBlock相同的功能:

myObject.saveInBackground(new SaveCallback() {
    public void done(ParseException e) {
        if (e == null) {
           myObjectSavedSuccessfully();
        } else {
           myObjectSaveDidNotSucceed();
        }
    }
});