【发布时间】: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。
-
那我们要在哪里使用