2016-08-24 170 views
0

我有一個MainActivity它增加了片段「A」,在片段「A」我送使用volley.I一些服務器的請求作出了被稱爲DialogUtil一類包含進度對話框implementation.Problem是,當我啓動應用程序它顯示在片段進度對話框實現 「A」。那是錯誤android在進度對話框中出錯?

java.lang.IllegalArgumentException異常: 查看= com.android.internal.policy.impl.PhoneWindow $ {DecorView 42759d68 VE .... [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(); 
       } 
+1

相反的getContext的()通過getActivity() –

+0

1。同樣的問題。我也有每日5到10次的用戶崩潰郵件的這個錯誤。我使用getActivity()但沒有成功。 – user392117

+0

嗨。 在片段中,您應該使用getActivity(),如上所述。 在我DialogUtils方法,我的第一行總是 如果(活動== NULL || activity.isFinishing())回報; 對話框在片段內使用時可以拋出NPE,如果它們被異步調用。 – Lev

回答

0

你調用方法異步執行的對話框?

如果你是,機會是,用戶已經退出由當時的代碼運行所產生的對話框,這是不好的多種方式的背景下(片段,活動或應用程序)。

就可以解決這個問題,如果你正在運行例如AsyncTask,在onDestroy調用AsyncTask小號cancel方法,但具體用例並非來自您提供的代碼清晰。

4

試試這個:

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

使用getActivity()代替的getContext()

0

我覺得問題在調用片段生命週期的代碼。請確保您在onActivityCreated之後調用對話框。

1

你應該使用getActivity()代替的getContext()。