我想以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
获得值,也许是回调延迟?或者任何想法?
答案 0 :(得分:1)
问题是ParseUser.logInInBackground()
是异步调用。
你告诉它开始登录过程,它会在代码与Parse服务器通话并获得响应后的一段时间后完成。
然后,您尝试在设置该值之前使用loggedIn
的值。
使用异步代码,您可以告诉它在代码完成后要做什么(public void done()
阻止)。您的startActivity()
等代码应该在回调块中。