【问题标题】:how to add progress dialog in inner class fragment如何在内部类片段中添加进度对话框
【发布时间】:2014-11-14 06:53:17
【问题描述】:

我想在片段中创建进度对话框,但一直显示错误是已泄漏窗口 com.android.internal.policy.impl.phonewindow 最初添加在此处。请帮忙,这是我的代码

 private class ListDaftarHargaAsync extends AsyncTask<String, Void, String> {

    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(getActivity());
        progressDialog.setMessage("retrieving...");
        progressDialog.setIndeterminate(false);
        progressDialog.setCancelable(false);
    }

    @Override
    protected String doInBackground(String... params) {
        try {
            modelPost.setDataVouchers();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        String result = modelPost.resultString;
        if (result.length() != 0) {
            progressDialog.dismiss();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        progressDialog.dismiss();
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                fillDaftarHarga();
            }
        });
    }
}

【问题讨论】:

  • progressDialog.show() 在哪里?并发布完整错误。并删除 progressDialog.dismiss();来自doInBackground。它在 onPostExecute
  • 删除doInBackground中的progressDialog.dismiss();
  • 我已经尝试过了,但仍然显示同样的错误

标签: android android-asynctask progressdialog


【解决方案1】:

检查进度对话框是否显示 你不能在 doInBackground 中触摸 UI 线程

    @Override 
    protected void onPreExecute() { 
        progressDialog = new ProgressDialog(getActivity());
        progressDialog.setMessage("retrieving..."); 
        progressDialog.setIndeterminate(false); 
        progressDialog.setCancelable(false); 
        progressDialog.show();
    } 

    @Override 
    protected String doInBackground(String... params) {
        try { 
            modelPost.setDataVouchers(); 
        } catch (JSONException e) {
            e.printStackTrace();
        } 
        String result = modelPost.resultString;
        return null; 
    } 

    @Override 
    protected void onPostExecute(String result) {
        if (null != progressDialog && progressDialog.isShowing()) {
            progressDialog.dismiss();
        } 
        getActivity().runOnUiThread(new Runnable() {
            @Override 
            public void run() { 
                fillDaftarHarga(); 
            } 
        }); 
    } 
}

【讨论】:

  • progressDialog = new ProgressDialog(CLASS_NAME.this); //试试这个
【解决方案2】:
leaked window com.android.internal.policy.impl.phonewindow that was originally added here.

由于您在doInBackground 上调用progressDialog.dismiss();,因此显示上述错误。

【讨论】:

  • @Ashadi 你尝试了什么(你从 doinbackgroud 中删除了 dissmiss)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 2017-05-14
  • 1970-01-01
相关资源
最近更新 更多