2015-05-29 49 views
1

我使用Android的parse.com后端。调用ParseUser.save删除会话

我想注册一个新用户,然后在用户对象上设置一些数据字段。注册后设置数据字段非常重要,因为稍后我想使用beforeSave触发器启用自动ACL设置(目前没有激活触发器!)。

会发生什么情况如下:注册成功完成,之后我设置数据字段并致电currentUser.save。有时SaveCallback根本没有被调用(既没有错误也没有成功)。但是,大部分时间被调用,但用户的会话被删除。我可以在数据浏览器中轻松检查。另外,如果我在此之后尝试做任何事情,我会得到无效的会话例外。

下面的代码:

final User user = getData(); 
user.setEmail(emailStr); 
user.setUsername(emailStr); 
user.setPassword(password); 

user.signUpInBackground(new SignUpCallback() { 
    @Override 
    public void done(ParseException e) { 
     if (e == null) { 
      // this will be more complex data in the future 
      User.getCurrentUser().put("testInt", 5); 
      User.getCurrentUser().saveInBackground(new SaveCallback() { 
       @Override 
       public void done(ParseException e) { 
        if (e == null) { 
         // Hooray! But wait.. Oh no, the session is gone 
        } else { 
         // Oh no, something even worse happened 
        } 
       } 
      }); 
     } else { 
      // signup failed 
     } 
    } 
}); 

超过一天后,尝试&错误我开始认为,这实际上是在分析框架中的错误。 guide明确指出:

新的ParseUser应始终使用signUpInBackground(或signUp)方法创建。通过调用save可以完成对用户的后续更新。

有没有人有类似的行为?

回答

0

注册后不要调用保存,之前放置您的数据和注册将保存它们。您还必须在注册后登录用户。成功时调用parseuser.logininbackground;这应该创建一个登录会话。 在登录之前解析之后保持匿名会话登录后创建用户会话。

+0

1.正如我所说,我真的想避免与注册保存数据,因为我想使用只有当用户登录时才起作用的触发器。 2.您确定必须在调用后登录注册?因为[doc](https://parse.com/docs/android/api/com/parse/ParseUser.html#signUp%28%29)指出: “这将在服务器上创建一个新的ParseUser,将会话保留在磁盘上,以便您可以使用'ParseUser.getCurrentUser()'“访问用户。 另外,如果我删除了对“save”的调用,并且只是注册,则会按照预期创建用户会话对象。 – dpoetzsch