Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 警报对话框错误_Android - Fatal编程技术网

Android 警报对话框错误

Android 警报对话框错误,android,Android,我试着看一个有两个选项的AlertDialog:Cámara和Galería。但当我运行应用程序时,它会关闭,并显示消息“不幸的是,MapaLugares已关闭” logcat消息是: 08-15 20:37:02.960: E/AndroidRuntime(5377): FATAL EXCEPTION: main 08-15 20:37:02.960: E/AndroidRuntime(5377): android.view.WindowManager$BadTokenException:

我试着看一个有两个选项的AlertDialog:Cámara和Galería。但当我运行应用程序时,它会关闭,并显示消息“不幸的是,MapaLugares已关闭”

logcat消息是:

08-15 20:37:02.960: E/AndroidRuntime(5377): FATAL EXCEPTION: main
08-15 20:37:02.960: E/AndroidRuntime(5377):  
android.view.WindowManager$BadTokenException: Unable to add window -- token null is   
not for an application
08-15 20:37:02.960: E/AndroidRuntime(5377):         at  
android.view.ViewRootImpl.setView(ViewRootImpl.java:521)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
android.view.WindowManagerImpl.addView(WindowManagerImpl.java:301)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at  
android.app.Dialog.show(Dialog.java:289)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
com.app.mapa.Insertarlugar$1.onClick(Insertarlugar.java:62)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at  
android.view.View.performClick(View.java:3521)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
android.view.View$PerformClick.run(View.java:14185)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
android.os.Handler.handleCallback(Handler.java:605)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
android.os.Handler.dispatchMessage(Handler.java:92)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
android.os.Looper.loop(Looper.java:137)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
android.app.ActivityThread.main(ActivityThread.java:4464)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
java.lang.reflect.Method.invokeNative(Native Method)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
java.lang.reflect.Method.invoke(Method.java:511)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:822)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:589)
08-15 20:37:02.960: E/AndroidRuntime(5377):     at 
dalvik.system.NativeStart.main(Native Method)
08-15 20:37:05.210: I/ActivityThread(5573): Pub com.app.mapa.MCProvider:   
com.app.mapa.MCProvider
08-15 20:37:05.570: D/memalloc(5573): /dev/pmem: Mapped buffer base:0x5127b000 
size:2826240 offset:1290240 fd:51
08-15 20:37:05.620: E/Adreno200-ES20(5573): <qgl2DrvAPI_glUseProgram:1318>: **** 5573: 
glUseProgram(3)
08-15 20:37:05.650: E/Adreno200-ES20(5573): <qgl2DrvAPI_glUseProgram:1318>: **** 5573: 
glUseProgram(6)
08-15 20:37:05.670: D/memalloc(5573): /dev/pmem: Mapped buffer base:0x516f7000 
size:4362240 offset:2826240 fd:58
怎么了

谢谢。

更改此行

AlertDialog.Builder(getApplicationContext());

对话框
是在
活动
上创建的,因此您希望使用其
上下文
来创建它,而不是应用程序的
上下文
。就我所理解的
Context
而言,大多数
UI
对象都是如此。有时,这可能适用于某些对象,例如
Toast
,但在我看来,最好尝试使用正确的
上下文,这就是
活动


并查看何时使用哪个
上下文

正如其他人在评论中提到的,您的上下文是错误的。谢天谢地,使用该方法很容易解决这个问题


尝试使用
Insertarlugar。这是
而不是
getApplicationContext()
您在对话框中传递了错误的上下文。您应该使用当前上下文,而不是applicationContext-1因为这是一个硬类型的解决方案,所以当上下文可以通过视图的方法自由使用时,您不应该得到这样的上下文。。。坏习惯。如果重命名“活动”,则将代码剪切/粘贴到另一个“活动”中。这种事情会导致更多的错误errors@Merlin这并不是投反对票的理由,伊姆霍,这仍然是一个正确的答案,并且被广泛使用。如果您重命名
活动
或复制/粘贴代码,这一点很容易改变。否决票应该用于不正确或冒犯性的回答…不是因为这不是你会做的方式。冒犯性的回答应该用主持人的旗帜来处理。向下投票是针对没有用处的asnwers的(将鼠标悬停在向下箭头上,你就会明白我的意思)。以这种方式使用
指针可能很常见,但糟糕的做法永远不会有用。如果我的任何开发人员被发现使用它,他们会被送到房间的角落去思考他们做错了什么。我也尝试了Alert.Dialog.Builder(getContext());但错误并没有被纠正。现在我们的答案很好。非常感谢你。我将看到关于何时使用正确上下文的答案,因为我不清楚。如果您参考的是另一个答案,则需要使用
arg0.getContext()
(其中
arg0
应该更改为
v
view
),获取与
视图关联的
上下文
,该视图在此处也会执行相同的操作。但梅林的答案更具可移植性,而且可能是更好的实践。但两者都是“正确的”。
AlertDialog.Builder(getApplicationContext());
AlertDialog.Builder(Insertarlugar.this);
    public void onClick(View arg0) {
                   final String[] items = {"Cámara", "Galería"};

         AlertDialog.Builder builder = new 
                 AlertDialog.Builder(arg0.getContext());
         builder.setTitle("Foto");
         builder.setItems(items, new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int item) {

                 Toast.makeText(Insertarlugar.this, "Click\n" + item, 
                         Toast.LENGTH_SHORT).show();
             }
         });
         AlertDialog alert = builder.create();
         alert.show();

     }