第二次单击登录按钮后,以 ParseUser 身份登录

Logging in as ParseUser works after second click on log in button

我想以 ParseUser 身份登录。一切正常,但在第二次单击按钮 Log in 之后。

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 获取值,可能是回调延迟?或者有什么想法?

问题是 ParseUser.logInInBackground() 是一个异步调用。

你告诉它开始登录过程,它会在代码与 Parse 服务器对话并获得响应后一段时间后完成。

然后您尝试使用 loggedIn 的值,然后再设置该值。

使用异步代码,您可以告诉它稍后在代码完成时做什么(public void done() 块)。您的 startActivity() 等代码应该在回调块内。