我正在开发一个 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 并保存该对象,则会收到
UserCannotBeAlteredWithoutSessionError
或 java.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/