即时开发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的一个字段。
¿有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
也许迟到但是Parse用户拥有公共读取和私有写入的ACL,因此您应该users.isAuthenticated()
检查其是真还是假。
如果为false,则使用该用户登录并重试。 注意:您无法同时编辑两个用户的信息而无需注销和重新登录。
您可以做的另一件事是使用角色并使用ACL来定义管理员角色,该ACL可以覆盖所有用户。