2015-01-11 186 views
1

我想作爲ParseUser登錄。一切正常,但第二次點擊按鈕Log in後。作爲ParseUser登錄後,第二次點擊登錄按鈕後工作

private void openMainActivity(boolean loggedIn) { 
    if (loggedIn){ 
     startActivity(new Intent(ParseStarterProjectActivity.this, MainPage.class)); 
     finish(); 
    }else{ 
     initialize(); 
     logInBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (logIn(username.getText().toString(),pwd.getText().toString())){ 
        startActivity(new Intent(ParseStarterProjectActivity.this, MainPage.class)); 
        finish(); 
       }else{ 
        Toast.makeText(getApplicationContext(), 
          "Failed to log in, try again.", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 
    } 
} 

登錄方法:

private boolean logIn(String username, String pwd) { 
    ParseUser.logInInBackground(username, pwd, new LogInCallback() { 
     public void done(ParseUser user, ParseException e) { 
      if (user != null) { 
       loggedIn=true; 
      } else { 
       loggedIn=false; 
      } 
     } 
    }); 
    return loggedIn; 
} 

它是時間的問題嗎?它不立即得到EditText的值,可能是回調延遲?或者有什麼想法?

回答

1

問題是ParseUser.logInInBackground()是一個異步調用。

你告訴它開始登錄過程,它將在代碼與Parse服務器通信並獲得響應後的某段時間完成。

然後,您正在設置值之前嘗試使用loggedIn的值。

使用異步代碼,您可以告訴它在代碼完成後要執行什麼操作(即public void done()塊)。你的startActivity()等代碼應該在回調塊內。

相關問題