2016-04-28 190 views
0

我一直在試圖獲得一個對話框消息工作在android和應用程序總是崩潰時,它到達「dialog.show();」爲什麼dialog.show()導致我的應用程序崩潰?

public class Logic extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context); 
    dialogBuilder.setTitle("Alarm"); 
    dialogBuilder.setMessage(messageActivity.getMes()); 
    dialogBuilder.setPositiveButton("OK", 
      new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } 
      }); 
    AlertDialog dialog = dialogBuilder.create(); 
    dialog.show(); 
} 
} 

這裏是我的logcat:

FATAL EXCEPTION: main 

Process: it226.myapplicationit226androidapp, PID: 19598 
java.lang.RuntimeException: Unable to start receiver it226.myapplicationit226androidapp.Logic: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2732) 
    at android.app.ActivityThread.-wrap14(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
    at android.view.ViewRootImpl.setView(ViewRootImpl.java:571) 
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:310) 
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85) 
    at android.app.Dialog.show(Dialog.java:319) 
    at it226.myapplicationit226androidapp.Logic.onReceive(Logic.java:65) 
    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2725) 
    at android.app.ActivityThread.-wrap14(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
+0

發佈您的logcat! –

+2

我想你不能從廣播接收器上下文啓動UI。我會考慮啓動一個顯示對話框的活動 –

回答

3

不能從接收器創建對話框。 創建對話框只能從UI組件(它有循環)。

您可以通過對話框開始透明活動,這對用戶來說是一樣的。

+0

謝謝,我會盡力做到這一點 – freedom666

0

使用BroadcastReceivercontext不能創建一個dialog,你有選項來解決這個問題:

第一個是創建具有唯一的大小經常活動對話框作爲所示部分和全其餘是透明:

Intent newIntent = new Intent(context, Displayer.class); 
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(newIntent); 

第二個是保持你的Activity上下文,然後使用它在創建對話框,但在這種方法,你必須確保什麼是目前打開的活動:

// in your activity onCreate 
ctx = YourActivity.this; // let's suppose ctx is static and general var 
//////////////////////////////////////////////// 
// in the BroadcastReceiver 
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(YourActivity.ctx); 
相關問題