2015-05-29 89 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