ProgressDialog未显示/仅在asyncTask之后显示

时间:2017-12-04 12:49:23

标签: android android-asynctask progressdialog

我试图在我点击调用AsyncTask的列表元素时向我的UI添加一个不确定的progressDialog,但不幸的是,如果我在onPreExecute上调用这样的对话框:

@Override
protected void onPreExecute() {
    super.onPreExecute();
    dialog.setProgressStyle(R.style.AppTheme_Dark_Dialog);
    dialog.setIndeterminate(true);
    dialog.setMessage(activity.getString(R.string.Buscando));
    dialog.show();
}

Obs:值得注意的是,Async不是Activity类的子类,我将该活动作为参数传递给构造函数。

@Override
protected void onPostExecute(BuscaPendentesFechamento buscaPendentesFechamento) {
    super.onPostExecute(buscaPendentesFechamento);
    if(dialog.isShowing())
        dialog.dismiss();
}

对话框根本没有显示,虽然它已被创建并调用(alredy checked,活动实例是正确的)

如果我在活动本身上设置对话框,例如:

final ProgressDialog progressDialog = new ProgressDialog(RegistraPeso.this, R.style.AppTheme_Dark_Dialog);
    progressDialog.setIndeterminate(true);
    progressDialog.setMessage(getString(R.string.Buscando));
    progressDialog.show();
    BuscaPendentesFechamento exportProjectRequisition = new BuscaPendentesFechamento(getApplicationContext());
    response = exportProjectRequisition.execute(nomeEquip,RegistraPeso.this);
    progressDialog.dismiss();

对话框显示在Ui上,但只有在AsyncTask alredy执行之后,而不是在它被调用之前,根据代码,它应该在异步甚至被创建之前显示。

我该怎么办?我究竟做错了什么?请帮忙。

编辑:添加了对话框的创建位置:

private ProgressDialog dialog;
private RegistraPeso activity;
BuscaPendentesFechamento(RegistraPeso activity) {
    this.dialog = new ProgressDialog(activity);
    this.activity = activity;
}

编辑:添加了doInBackground:

    @Override
protected BuscaPendentesFechamento doInBackground(String... params) {
    ArrayList<UmData> jsonArrayResponse = JSONParser.makeHttpRequestArray(
            Constants.URL_PENDENTES_FECHAMENTO,
            Constants.METHOD_POST, requisition.writeJSON(params[0]),
            requisition.getContext());
    if(jsonArrayResponse!=null)
    requisition.setJsonArrayResponse(jsonArrayResponse);
    else {
        UmData umData = new UmData();
        umData.setItemUm("Server not responding");
        jsonArrayResponse = new ArrayList<>();
        jsonArrayResponse.add(umData);
        requisition.setJsonArrayResponse(jsonArrayResponse);
    }
    return requisition;
}

2 个答案:

答案 0 :(得分:0)

在这种情况下,应用程序上下文不起作用。替换

下面的行
 BuscaPendentesFechamento exportProjectRequisition = new BuscaPendentesFechamento(getApplicationContext());

 BuscaPendentesFechamento exportProjectRequisition = new BuscaPendentesFechamento(YourActivity.this);

我在execute()之后看到你正在调用dismiss()的代码。删除此行。

 progressDialog.dismiss();

答案 1 :(得分:0)

在这里OP,通过改变基于[this] [1]

的代码来解决问题

[1]:How to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?发布在这里,由@MikeM发送给我,问题是我使用AsyncTask中的.get()获取响应,并且它正在将Async转换为Syncronous任务。 感谢Mike的支持!