我正在开发一个 Android 应用程序。

我有一个自定义类,它与两个 ParseUsers 和其他字段有关系。正如文档所建议的那样,我使用了一个数组(带有键“usersArray”)来存储两个 ParseUsers 的指针,因为我希望在查询自定义类时能够使用“include”来包含用户。我可以创建一个新对象并成功保存它。

//My custom parse class:
CustomObject customObject = new CustomObject();
ArrayList<ParseUser> users = new ArrayList<ParseUser>();
users.add(ParseUser.getCurrentUser());
users.add(anotherUser);
customObject.put("usersArray", users);
//I also store other variable which i would like to update later
customObject.put("otherVariable",false);
customObject.saveInBackground();

另外,我可以通过以下方式成功查询:
ParseQuery<CustomObject> query = CustomObject.getQuery();
query.whereEqualTo("usersArray", ParseUser.getCurrentUser());
query.whereEqualTo("usersArray", anotherUser);
query.include("usersArray");
query.findInBackground( .... );

我的问题是在尝试更新其中一个 CustomObject 时。
因此,在使用上一个查询检索 CustomObject 后,如果我尝试将“otherVariable”的值更改为 true 并保存该对象,则会收到 UserCannotBeAlteredWithoutSessionErrorjava.lang.IllegalArgumentException: Cannot save a ParseUser that is not authenticated 异常。
CustomObject customObject = customObject.get(0); //From the query
customObject.put("otherVariable", true);
customObject.saveInBackground(); // EXCEPTION

我可以看到这与我尝试更新包含指向 ParseUser 的指针的对象有某种关系。但我没有修改用户,我只想更新 CustomObject 的字段之一。

¿有什么办法可以解决这个问题吗?

最佳答案

也许晚了,但 Parse 用户有公共(public)读取和私有(private)写入的 ACL,所以你应该做 users.isAuthenticated() 来检查它是真还是假。

如果为 false,则以用户身份登录并重试。 注意: 你不能在没有注销并重新登录的情况下同时编辑两个用户的信息。

您可以做的另一件事是使用角色并通过使用可以覆盖所有用户的 ACL 定义管理员角色。

关于parse-platform - 解析Android : update ParseObject containing an array of ParseUsers throws UserCannotBeAlteredWithoutSessionError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29089084/

10-11 01:48