doInTheBackground不等功能完成?
问题描述:
我想在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
。
'Stormpath.login()'使用回调函数,因此它看起来已经在后台线程上执行网络调用,并通过回调返回结果。如果这是真的,那么在这种情况下你不需要'AsyncTask'。 – Egor
为什么要等待? 'login()'是一个异步调用,它不会阻塞调用线程。 – earthw0rmjim
@Egor谢谢你可以把它写成一篇文章,所以我可以验证它作为一个答案 –