2017-09-25 21 views
0

我是一個新的android開發人員,最近遭受了一個問題。應用程序崩潰時創建一個null上下文的alertDialog

背景是我需要顯示一個AlertDialog當一個後端asyncTask完成。但是,經過很長時間的asyncTask後,活動可能會是GC'd,因此AlertDialog的輸入參數的上下文爲空。是否有解決此問題的任何解決方法。

我用這個函數來顯示對話框:

public static Dialog showDialog(
      Context ctx, int themeId, String title, String message, 
      int okStrId, android.content.DialogInterface.OnClickListener okListener, 
      int cancelStrId, android.content.DialogInterface.OnClickListener cancelListener) { 
     if (ctx != null) { 
      AlertDialog.Builder builder; 
      if (themeId > 0) 
       builder = new AlertDialog.Builder(new ContextThemeWrapper(ctx, themeId)); 
      else 
       builder = new AlertDialog.Builder(ctx); 
      if (title != null) 
       builder.setTitle(title); 
      builder.setMessage(message); 
      builder.setPositiveButton(ctx.getString((okStrId < 0) ? R.string.ok : okStrId), 
        (okListener != null) ? okListener : sDefaultDialogListener); 
      if (cancelListener != null) 
       builder.setNegativeButton(ctx.getString((cancelStrId < 0) ? R.string.cancel : cancelStrId), cancelListener); 
      else { 
       builder.setCancelable(false); 
      } 
      AlertDialog ad = builder.create(); 
      ad.show(); 
      return ad; 
     }else { 
      Context context = SuccessFactorsApp.getAppContext(); 
      DialogActivity.launchActivity(ctx,themeId,title,message,okStrId,okListener,cancelStrId,cancelListener); 
      return new AlertDialog.Builder(context).create(); 
     } 
    } 

我試圖用一個活動來模擬對話,但不知道如何處理DialogInterface.OnClickListener

+0

請發表您的LogCat! –

回答

0

添加到您的代碼:

if(!((Activity) context).isFinishing()) 
{ 
    //show dialog 
} 
+0

感謝您的答案。問題是我需要顯示對話框,即使活動是垃圾收集。 – vincentFeng11

0

在運行asyntask和做後臺活動就會被殺死和任務完成就可以不顯示不activity.You一個對話框垃圾collected..Hence可以嘗試要麼

1.By添加下面的權限顯示您的對話框。新增這個權限來體現

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 

雖然顯示對話框添加此行的C頌dialog.show()之前

alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 

任務的2.1936 finsihing啓動所需的活動和開放的應用

3.使用麪包,而不是對話。

相關問題