0

Android アプリに完全に機能する asynctask がありますが、接続していないと、Async が接続していないことに起因するアクティビティ (AlertDialog.Builder 内) 内のエラー メッセージでアプリがクラッシュします。Context を非同期に渡すので、何か関係があるかもしれませんが、わかりません。

以下は、Async クラスとアクティビティのコードです。LogCat は、AlertDialog アラート builder.create() でエラーが発生していることを通知しています。どうすれば解決できますか?

非同期クラスから:

    InputsRecapUploadTask extends AsyncTask<String, Void, Integer> {

public InputsRecapUploadTask(InputsRecap activity,
        ProgressDialog progressDialog, Context ctx) {
    this.activity = activity;
    this.myCtx = ctx;
    this.progressDialog = progressDialog;   
}

@Override
protected void onPreExecute() {
    progressDialog.show();
}

}       
@Override
protected Integer doInBackground(String... arg0) {
    //// http code
                responseCode = 1;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        progressDialog.dismiss();
        activity.showLoginError("");
    }

    return responseCode;

}

@Override
protected void onPostExecute(Integer headerCode) {
    progressDialog.dismiss();
    if (headerCode == 1)
        activity.login(id);
    else
        activity.showLoginError("");
}
Activity Class:
    public void showLoginError(String result) {
    AlertDialog.Builder builder = new AlertDialog.Builder(InputsRecap.this);
    builder.setPositiveButton("okay",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
    builder.setMessage("unable to upload database");
    AlertDialog alert = builder.create();
    alert.setCancelable(true);
    alert.show();

}
4

1 に答える 1

1

メソッドで例外がスローされた場合、doInBackground次の 2 行:

progressDialog.dismiss();
activity.showLoginError("");

例外が発生します -doInBackgroundメソッド内から UI を変更することはできません。代わりにフラグを設定onPostExecuteし、メイン スレッドで実行されるエラー ダイアログを表示します。

以下のリンク、特にThe 4 steps という見出しの下のトピックを確認してください。

http://developer.android.com/reference/android/os/AsyncTask.html

于 2013-04-14T18:10:54.250 に答える