Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android save()抛出IllegalArgumentException(无法保存未经身份验证的用户)为什么?_Android_Parse Platform_Save - Fatal编程技术网

Android save()抛出IllegalArgumentException(无法保存未经身份验证的用户)为什么?

Android save()抛出IllegalArgumentException(无法保存未经身份验证的用户)为什么?,android,parse-platform,save,Android,Parse Platform,Save,我在db中有一个表,我们可以称它为“a”,只有2列: user (Pointer _User) b (Pointer "B") (where "B" is another table in my db) 代码是: a.put("b", b); a.put("user", ParseUser.getCurrentUser()); a.save(); //I manage my threading 在a.save()上,标题中的IllegalArgumentExcepti

我在db中有一个表,我们可以称它为“a”,只有2列:

user (Pointer _User)
b (Pointer "B") (where "B" is another table in my db)
代码是:

    a.put("b", b);
    a.put("user", ParseUser.getCurrentUser());
    a.save(); //I manage my threading
在a.save()上,标题中的IllegalArgumentException被抛出,请有人解释一下原因?在“B”表中有一列指向另一个用户,我希望问题不在于此

这是logcat输出:

来自官方

用户对象的安全性

默认情况下,ParseUser类是安全的。
ParseUser
中存储的数据只能由该用户修改。默认情况下,任何客户端都可以读取数据。因此,一些
ParseUser
对象经过身份验证并可以修改,而另一些对象是只读的

具体来说,除非使用经过身份验证的方法(如
logIn
signUp
)获取
ParseUser
,否则您无法调用任何save或delete type方法。这确保只有用户可以更改自己的数据

以下说明了此安全策略:

ParseUser user = ParseUser.logIn("my_username", "my_password");
user.setUsername("my_new_username"); // attempt to change username
user.saveInBackground(); // This succeeds, since the user was authenticated on the device

// Get the user from a non-authenticated manner
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.getInBackground(user.getObjectId(), new GetCallback<ParseUser>() {
  public void done(ParseUser object, ParseException e) {
    object.setUsername("another_username");

    // This will throw an exception, since the ParseUser is not authenticated
    object.saveInBackground();
  }
});
ParseUser user=ParseUser.logIn(“我的用户名”、“我的密码”);
user.setUsername(“我的新用户名”);//尝试更改用户名
user.savenbackground();//此操作成功,因为用户已在设备上进行身份验证
//以未经身份验证的方式获取用户
ParseQuery=ParseUser.getQuery();
query.getInBackground(user.getObjectId(),new GetCallback()){
public void done(ParseUser对象,parsee异常){
object.setUsername(“另一个_用户名”);
//这将引发异常,因为ParseUser未经过身份验证
object.saveInBackground();
}
});
getCurrentUser()
获取的
ParseUser
将始终经过身份验证


如果需要检查
ParseUser
是否经过身份验证,可以调用
isAuthenticated()
方法。您不需要使用通过身份验证方法获得的
ParseUser
对象来检查
isAuthenticated()

但我并没有试图编辑_User中的一行,而是编辑另一个表中的一行,其中_User只是列的一种类型,该用户甚至是由getCurrentUser()获取的。。所以???请提供完整的实数代码,这将获得例外。很难通过伪代码或伪代码的一部分来判断你做错了什么。同样的问题。我可以创建一个具有指向其他用户的字段的对象,并第一次保存它。但是,稍后,我无法更新该对象。嘿,你最终找到了这个问题的解决方案吗?我的问题是,在用户表中,我有一个JSonObject作为字段。这意味着,当您从该表中获取一行时,如果该行与您的用户不匹配,那么如果您获得JSonObject字段,则将该行解析为dirty,然后再次尝试保存它。由于该行与您登录的ParseUser不匹配,因此会引发异常。这个故事的寓意是:在用户表中,如果其他用户必须读取此对象,则不要使用JSONObject。