我有一个MainActivity,它添加片段“A”,在片段“A”中,我正在使用volley发送一些服务器请求。我创建了一个名为DialogUtil的类,其中包含进度Dialog实现。问题是,当我启动应用程序时在片段“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();
}
答案 0 :(得分:4)
试试这个:
DialogUtils.showProgressDialog(getActivity(), "Loading...");
使用getActivity()而不是getContext()
答案 1 :(得分:1)
你应该使用getActivity()而不是getContext()。
答案 2 :(得分:0)
您是否异步调用该方法?
如果你是,那么很可能,用户在创建对话框的代码运行时退出了上下文(片段,活动或应用程序),这在很多方面都很糟糕。
如果您正在运行AsyncTask,可以通过调用onDestroy
AsyncTask s cancel方法来解决此问题,但具体的用例不会从你提供的代码中可以看出来。
答案 3 :(得分:0)
我认为在片段生命周期中调用代码存在问题。请确保在onActivityCreated之后调用对话框。