我遇到以下问题。我试图寻找答案,但没有任何答复可以帮助我,所以我在这里问这个问题。任何回应将不胜感激!onPostExecute在doInBackground之前执行
我使用下面的AsyncTask来使用Firebase API公开的登录方法。但是,当我点击登录按钮调用新的LoginOperation()。execute()时,我没有看到预期的结果。我粘贴下面的代码和Logcat输出。
我想知道为什么onPostExecute在doInBackground之前执行?请注意我正在使用有效的电子邮件ID &密码,所以我应该能够正确登录。
代码:
private class LoginOperation extends AsyncTask<Void, Void, Boolean> {
protected Boolean doInBackground(Void... params) {
try{
authClient.loginWithEmail(emailid.getText().toString(),password.getText().toString(), new SimpleLoginAuthenticatedHandler() {
public void authenticated(
com.firebase.simplelogin.enums.Error error, User user) {
if(error != null) {
// There was an error logging into this account
loginStatus=false;
errorMsg=error.name();
Log.d(appName, "Inside if block in doInBackground of LoginOperation");
}
else {
// We are now logged in
loginStatus=true;
Log.d(appName, "Inside else block in doInBackground of LoginOperation");
}
}
});
}
catch (Exception e)
{
e.printStackTrace();
}
return Boolean.valueOf(loginStatus);
}
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
if (result.booleanValue()) {
toastMsg="User logged in successfully";
Log.d(appName, "Inside onPostExecute success of LoginOperation");
}
else
{
toastMsg="Error in login";
Log.d(appName, "Inside onPostExecute failure of LoginOperation");
}
TextView displayStatus = (TextView) findViewById(R.id.displayStatus);
displayStatus.setText(toastMsg);
}
protected void onPreExecute() {
super.onPreExecute();
}
protected void onProgressUpdate(Void... values) {}
}
代码调用上登录点击:
public void onLogin(View arg0)
{
Log.d(appName, " email id is " + emailid.getText().toString());
Log.d(appName, " password is " + password.getText().toString());
try {
Boolean finalStatus= new LoginOperation().execute().get(5000, TimeUnit.MILLISECONDS);
Log.d(appName, " final Status is: " + finalStatus.booleanValue());
}
的logcat:
01-27 17:50:02.054: D/LOGIN(984): email id is [email protected]
01-27 17:50:02.054: D/LOGIN(984): password is abc123
01-27 17:50:02.082: D/LOGIN(984): final Status is: false
01-27 17:50:02.082: D/LOGIN(984): Inside onPostExecute failure of LoginOperation
01-27 17:50:05.502: D/LOGIN(984): Inside else block in doInBackground of LoginOperation
预期结果:
Inside else block in doInBackground of LoginOperation
Inside onPostExecute success of LoginOperation
为了确保您没有搞乱任何方法签名,请在'AsyncTask'中覆盖所有您要覆盖的方法之上放置'@ Override'注释。 – NasaGeek
你是否修改过Sdk? = 0! Jk =) – Jorgesys