私はアンドロイドアプリの基本的なログイン画面を実装しようとしています。
1)ユーザーがログイン情報を入力してヒットします。
2)AsyncTask
を拡張するLoginRequest
が作成され、実行されます。
3)doInBackground
は、いくつかのhttpを発射しますが、ユーザーの資格情報
4)onPostExecute
はloginResults
5)UIスレッドは、ログイン結果を見て、それに応じて続けて設定するために呼び出さ取得する必要がありますを検証するために呼び出します。AsyncTask onPostExecute is not 'が呼び出されています
私は根本的な問題になるようにコードを単純化していますが、これまでのところ運がなかったわけです。ここには、問題を再現している簡略化されたコードがあります。私の活動インサイド
:
private void tryLogin(String email, String password)
{
this.showProgress(true);
LoginHelper loginHelper = new LoginHelper();
LoginResult result = loginHelper.tryLogin(email, password);
this.showProgress(false);
}
これは、クリックリスナーに私の提出ボタンから呼び出されます。
インサイドLoginHelper:
TestClass test = new TestClass();
public LoginResult tryLogin(String mobileNumber, String password, int deviceId)
{
String loginUrl = "...";
new LoginRequest(test).execute(loginUrl);
while (test.result == null)
{
try {
Thread.sleep(1000);
}
catch (Exception e)
{
//...
}
}
return test.result;
}
これはAsyncTaskを実行し、結果が継続されて待ちます。
LoginRequest:
public class LoginRequest extends AsyncTask<String, Void, LoginResult>
TestClass test;
public LoginRequest(TestClass test)
{
this.test = test;
}
@Override
protected LoginResult doInBackground(String... params) {
LoginResult ret = null;
ret = new LoginResult(1,"test");
return ret;
}
@Override
protected void onPostExecute(LoginResult result) {
this.test.result = result;
}
}
私はdoInBackground
とonPostExecute
内部のブレークポイントでデバッガを介してこれを実行します。 doInBackground
が正常に実行され、の値が返されますが、onPostExecute
のブレークポイントは決してヒットしません。コードはwhileループでLoginHelper
に待機します。
onPostExecute()が呼び出されなかった場合に実行される次のステートメントはどれですか? –
このリンクをチェックすると、http://nads-rosun.blogspot.in/2014/01/android-login-application-using.html – AmeeJoshi
@AlokGupta LoginHelperのwhileループはテストを継続して待機します。結果を設定する。 –