Android 警报对话框错误
我试着看一个有两个选项的AlertDialog:Cámara和Galería。但当我运行应用程序时,它会关闭,并显示消息“不幸的是,MapaLugares已关闭” logcat消息是: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:
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();
}