Android AlertDialog活动&;异步错误

Android AlertDialog活动&;异步错误,android,android-asynctask,android-alertdialog,Android,Android Asynctask,Android Alertdialog,我的android应用程序中有一个功能齐全的asynctask,但当我未连接时,它会导致我的应用程序在我的活动(在AlertDialog.Builder中)中的错误消息中崩溃,该消息源于异步未连接。我将上下文传递给我的async,因此这可能与此有关,但不确定 下面是异步类和活动的代码。LogCat告诉我AlertDialog alert builder.create()中发生错误。我怎样才能解决这个问题 从异步类: InputsRecapUploadTask extends AsyncT

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

下面是异步类和活动的代码。LogCat告诉我AlertDialog alert 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();

}
InputsRecapUploadTask扩展了AsyncTask{
公共InputsRecapUploadTask(InputsRecapActivity,
ProgressDialog,上下文(ctx){
这个。活动=活动;
this.myCtx=ctx;
this.progressDialog=progressDialog;
}
@凌驾
受保护的void onPreExecute(){
progressDialog.show();
}
}       
@凌驾
受保护的整数doInBackground(字符串…arg0){
////http代码
响应代码=1;
}
}
}捕获(例外e){
e、 printStackTrace();
progressDialog.disclose();
activity.showLoginError(“”);
}
返回响应代码;
}
@凌驾
受保护的void onPostExecute(整数头代码){
progressDialog.disclose();
if(headerCode==1)
activity.login(id);
其他的
activity.showLoginError(“”);
}
活动类别:
public void showlogin错误(字符串结果){
AlertDialog.Builder=新建AlertDialog.Builder(InputsRecap.this);
builder.setPositiveButton(“好的”,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
dialog.cancel();
}
});
builder.setMessage(“无法上载数据库”);
AlertDialog alert=builder.create();
alert.setCancelable(真);
alert.show();
}

如果在
doInBackground
方法中抛出异常,请执行以下两行:

progressDialog.dismiss();
activity.showLoginError("");
将导致异常-您不能从
doInBackground
方法中修改UI。而是在主线程中执行的
onPostExecute
中设置一个标志并显示错误对话框

检查下面的链接,尤其是标题下的4个步骤下的主题