doInTheBackground 不等待功能完成?
doInTheBackground doesn't wait for function to finish?
我正在尝试使用 android 中的 Stormpath 框架组合登录屏幕。我使用了 android studio 中提供的标准登录屏幕,并且只修改了 UserLoginTask。我的问题是它似乎没有等待我对 Stormpath 的调用完成。一旦 class 被调用,它就会直接进入执行 doInBackground,然后直接进入 onPostExecute。这是我的 class:
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()
使用回调,很可能它已经在后台线程上进行网络调用,并且 returns 您可以通过回调获得结果。如果是这种情况,那么您真的不需要 AsyncTask
.
我正在尝试使用 android 中的 Stormpath 框架组合登录屏幕。我使用了 android studio 中提供的标准登录屏幕,并且只修改了 UserLoginTask。我的问题是它似乎没有等待我对 Stormpath 的调用完成。一旦 class 被调用,它就会直接进入执行 doInBackground,然后直接进入 onPostExecute。这是我的 class:
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()
使用回调,很可能它已经在后台线程上进行网络调用,并且 returns 您可以通过回调获得结果。如果是这种情况,那么您真的不需要 AsyncTask
.