0

我的 android 应用程序中有一个功能齐全的 asynctask,但是当我没有连接时,它会导致我的应用程序在我的 Activity(在 AlertDialog.Builder 中)由于异步未连接而导致的错误消息中崩溃。我将上下文传递给我的异步,所以这可能与它有关,但不确定。

下面是来自 Async 类和 Activity 的代码。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这两行:

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 回答