【问题标题】:Getting error in Progress Dialog in android?在android中的Progress Dialog中出现错误?
【发布时间】:2017-04-27 19:07:50
【问题描述】:

我有一个添加片段“A”的 MainActivity,在片段“A”中我正在使用 volley 发送一些服务器请求。我创建了一个名为 DialogUtil 的类,其中包含进度对话框实现。问题是当我启动应用程序时在片段“A”中的进度对话框实现中显示错误。即

java.lang.IllegalArgumentException: 查看=com.android.internal.policy.impl.PhoneWindow$DecorView{42759d68 V.E..... R......D 0,0-456,144} 未附加到窗口管理器和 变为强制关闭。

DialogUtil 类代码:-

   public class DialogUtils {

    public static ProgressDialog showProgressDialog(Context context, String message) {
        ProgressDialog m_Dialog = new ProgressDialog(context);
        m_Dialog.setMessage(message);
        m_Dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        m_Dialog.setCancelable(false);
        m_Dialog.show();
        return m_Dialog;
    }
}

片段“A”中的进度对话框实现

m_Dialog = DialogUtils.showProgressDialog(getContext(), "Loading...");

        final String m_DealListingURL = "http://202.131.1.132:8080/ireward/rest/json/metallica/getDealListInJSON";
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, m_DealListingURL, jsonObject, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.i(TAG, "Server Response:-" + response);
                if (m_Dialog != null && m_Dialog.isShowing()) {
                    m_Dialog.dismiss();
                }

【问题讨论】:

  • 通过getActivity()代替getContext()
  • +1。同样的问题。我还每天收到 5 到 10 封针对此错误的用户崩溃邮件。我使用 getActivity() 但没有成功。
  • 嗨。在片段内部,您应该使用上面提到的 getActivity()。在我的 DialogUtils 方法中,我的第一行始终是 if(activity == null || activity.isFinishing()) return;如果异步调用对话框,则在片段内部使用时可能会引发 NPE。
  • 那我们要在哪里使用

标签: android progressdialog


【解决方案1】:

试试这个:

DialogUtils.showProgressDialog(getActivity(), "Loading...");

使用 getActivity() 代替 getContext()

【讨论】:

    【解决方案2】:

    你应该使用 getActivity() 而不是 getContext()。

    【讨论】:

      【解决方案3】:

      你是在异步调用方法吗?

      如果您是,则很有可能,在创建对话框的代码运行时,用户已经退出了上下文(片段、活动或应用程序),这在很多方面都很糟糕。

      如果您正在运行 AsyncTask,您可以解决此问题,例如,通过调用 onDestroy 中的 AsyncTasks cancel 方法,但具体的用例并不能从您的代码中明确已提供。

      【讨论】:

        【解决方案4】:

        我认为在片段生命周期中调用代码有问题。请确保您在 onActivityCreated 之后调用对话框。

        【讨论】:

          猜你喜欢
          • 2012-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多