Parse.com pinInBackground ParseException

时间:2015-08-26 12:22:29

标签: android sqlite parse-platform

我正在使用以下代码保存对象并将其固定到本地数据存储区:

final ParseObject testObject = new ParseObject("freunde");
ParseObject objspieler = ParseObject.createWithoutData("_User", ParseUser.getCurrentUser().getObjectId().toString());
ParseObject objfreund = ParseObject.createWithoutData("_User", id);
testObject.put("spielerid", objspieler);
testObject.put("freundid", objfreund);               
 testObject.saveInBackground(new SaveCallback() {
                    public void done(ParseException e) {
                        if (e == null) {
                            testObject.pinInBackground(new SaveCallback() {
                            @Override
                            public void done(ParseException e) {
                                if (e == null) {
                                    progress.dismiss();
                                    llfreunde.removeAllViews();
                                    getfriends(1);
                                } else {
                                    progress.dismiss();
                                    Toast.makeText(getApplicationContext(), e.getMessage().toString(), Toast.LENGTH_LONG).show();
                                }
                            }
                            });
                        } else {
                            Toast.makeText(getApplicationContext(), e.getMessage().toString(), Toast.LENGTH_LONG).show();
                        }
                    }
                });

运行代码后,pinInBackground抛出以下异常:

bolts.AggregateException: There were 3 exceptions.
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: ParseObjects.className, ParseObjects.objectId (code 2067)

我不知道如何解决这个问题!谢谢你的帮助!我正在使用Parse 1.10.1

感谢

1 个答案:

答案 0 :(得分:0)

不确定它是否是问题的一部分,但您可以通过更改来创建指针,而不是存储ID:

final ParseObject testObject = new ParseObject("freunde");
ParseObject objspieler = ParseObject.createWithoutData("_User", ParseUser.getCurrentUser().getObjectId().toString());
ParseObject objfreund = ParseObject.createWithoutData("_User", id);
testObject.put("spielerid", objspieler);
testObject.put("freundid", objfreund);   

要:

ParseUser freund; // assuming you have looked up the User object of the friend

final ParseObject testObject = new ParseObject("freunde");
testObject.put("spieler", ParseUser.getCurrentUser());
testObject.put("freund", freund);  

但是我不清楚你为什么要创建这个对象?我的意思是,你可以在User对象中存储一个朋友指针数组。

<强>为什么

现在创建一个有用的查询来获取有关这两个用户的信息要容易得多:

ParseQuery query = new ParseQuery("freunde");
query.whereEqualTo("spieler", ParseUser.getCurrentUser());
query.include("freund");

List<ParseObject> freunde = query.find();
for (ParseObject freund: freunde) {
    ParseUser freundUser = freund.getParseObject("freund");
}

请注意,这只是简单的代码,显示了这个想法。明显的好处是你不需要单独查找指针。它在查询的结果集中可以立即使用。