0
我想在android中使用Stormpath框架的登錄屏幕。我使用了android studio中提供的標準登錄屏幕,並且只修改了UserLoginTask。我的問題是,它似乎並沒有等待我的電話Stormpath完成。一旦這個類被調用,它會直接執行doInBackground,然後直接執行onPostExecute。這裏是我的課:doInTheBackground不等功能完成?
public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
private final String mEmail;
private final String mPassword;
private boolean loginResult;
String errorMessage;
UserLoginTask(String email, String password) {
mEmail = email;
mPassword = password;
}
@Override
protected Boolean doInBackground(Void... params) {
Stormpath.login(mEmail, mPassword, new StormpathCallback<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d("debug", "sucess");
loginResult = true;
}
@Override
public void onFailure(StormpathError error) {
errorMessage = error.message();
Log.d("debug", "Error: " + error.message());
loginResult = false;
}
});
return loginResult;
}
@Override
protected void onPostExecute(final Boolean success) {
mAuthTask = null;
showProgress(false);
if (success) {
finish();
} else {
Toast.makeText(LoginActivity.this, errorMessage, Toast.LENGTH_SHORT).show();
mPasswordView.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}
@Override
protected void onCancelled() {
mAuthTask = null;
showProgress(false);
}
}
'Stormpath.login()'使用回調函數,因此它看起來已經在後臺線程上執行網絡調用,並通過回調返回結果。如果這是真的,那麼在這種情況下你不需要'AsyncTask'。 – Egor
爲什麼要等待? 'login()'是一個異步調用,它不會阻塞調用線程。 – earthw0rmjim
@Egor謝謝你可以把它寫成一篇文章,所以我可以驗證它作爲一個答案 –