java - 为什么dialog.show()导致我的应用程序崩溃?

标签 java android

我一直在尝试在 Android 上获取对话框消息,但应用程序在到达“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();
}
}

这是我的日志:

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) 

最佳答案

您无法从接收者创建对话。 仅允许从 UI 组件(具有循环程序)创建对话框。

您可以使用对话框启动透明 Activity ,这对于用户来说是相同的。

关于java - 为什么dialog.show()导致我的应用程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36908731/

相关文章:

java - 为什么 getItem(position) 应该在泛型类(即 Custom ArrayAdapter<T>)内进行转换?

android - 挂载 Android 模拟器镜像

Android Studio - 设计 View 无法解决模块依赖关系

java - 如何克服java.lang.NullPointerException : Attempt to invoke virtual method 'java.sql.Connection' on a null object reference? [duplicate]

android - Dagger 2 Android 没有注入(inject)字段

Java小程序获取文档cookie?

c# - 位移和数据解释

android - 检查是否正在播放MediaPlayer?怎么样?

java - 处理器核心和线程数

java - hibernate 和映射 : Is it possible to automatically set foreign key without setting bidirectional relationship among objects?