【发布时间】:2018-01-07 14:30:41
【问题描述】:
我创建了一个AsyncTask 来处理Sing in。问题是Firebase 方法signInWithEmailAndPassword 在doInBackground 返回值后完成。我不想让我的onPostExecute(Boolean task) 响应登录任务是否成功,但是当我检查日志消息时,我可以看到onPostExecute() 在onComplete() 之前完成。
在onComplete() 和doInBackground() 完成后,我如何制作我的onPostExecute()。
日志消息:
01-07 12:25:43.775 4046-4241/mk.capitalria.jusufi.riaposdeveloper V/SignInActivity: doInBackground() return type is false
01-07 12:25:43.785 4046-4046/mk.capitalria.jusufi.riaposdeveloper V/SignInActivity: onPostExecute() task is false
01-07 12:25:44.965 4046-4046/mk.capitalria.jusufi.riaposdeveloper V/SignInActivity: onComplete task is successful: true
01-07 12:25:44.965 4046-4046/mk.capitalria.jusufi.riaposdeveloper V/SignInActivity: onComplete task is complete: true
AsyncTask 类:
public class LoginTask extends AsyncTask<String, Void, Boolean> {
boolean isSuccessful;
boolean isComplete;
FirebaseAuth firebaseAuth;
@Override
protected void onPreExecute() {
super.onPreExecute();
firebaseAuth = FirebaseAuth.getInstance();
signInLayout.setVisibility(View.GONE);
sinInTask.setVisibility(View.VISIBLE);
}
@Override
protected Boolean doInBackground(String... strings) {
final String email = strings[0];
final String password = strings[1];
firebaseAuth.signInWithEmailAndPassword(email, password).
addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
isSuccessful = task.isSuccessful();
isComplete = task.isComplete();
Log.v(TAG, "onComplete task is successful: " + isSuccessful);
Log.v(TAG, "onComplete task is complete: " + isComplete);
}
});
Log.v(TAG, "doInBackground() return type is " + (isSuccessful && isComplete));
return isComplete && isSuccessful;
}
@Override
protected void onPostExecute(Boolean task) {
super.onPostExecute(task);
Log.v(TAG, "onPostExcecute task is: " + task);
if (!task) {
sinInTask.setVisibility(View.GONE);
signInLayout.setVisibility(View.VISIBLE);
Toast.makeText(SignInActivity.this, "Authentication failed.",
Toast.LENGTH_LONG).show();
} else {
Intent intent = new Intent(SignInActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}
}
【问题讨论】:
标签: android firebase asynchronous android-asynctask firebase-authentication