0
私はアンドロイドにStormpathフレームワークを使ってログイン画面をまとめようとしています。私はアンドロイドスタジオで提供されている標準のログイン画面を使用し、UserLoginTaskのみを変更しました。私の問題は、ストームパスへの電話が終わるのを待たずにいることです。クラスが呼び出されると直ちに、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これはありがとう、私は答えとしてそれを検証することができます –