关于AlertDialog中不可思议的dialog.show()异常出错的问题的解决
2011-09-21 16:13
417 查看
学习java连带着学习android应用开发应该差不多两个星期了吧,开始有点儿慢慢适应了,现在着手尝试修改别人的程序代码来创建自己所需要的东西,但是最近需要在一个popupwindow窗口中启动一个dialog,我是先尝试着把这篇博客里给的简单代码贴到我的程序里面,http://blog.163.com/wangkangming2008@126/blog/static/7827792820110910392369/这是链接
代码如下
但是logcat会打印出出错的信息:
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): FATAL EXCEPTION: main
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.view.ViewRoot.setView(ViewRoot.java:509)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.app.Dialog.show(Dialog.java:241)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at com.mydictionary.www.CustomMenuView.login(CustomMenuView.java:173)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at com.mydictionary.www.CustomMenuView.access$3(CustomMenuView.java:146)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at com.mydictionary.www.CustomMenuView$2.onClick(CustomMenuView.java:139)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.view.View.performClick(View.java:2408)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.view.View$PerformClick.run(View.java:8816)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.os.Handler.handleCallback(Handler.java:587)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.os.Handler.dispatchMessage(Handler.java:92)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.os.Looper.loop(Looper.java:123)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at java.lang.reflect.Method.invokeNative(Native Method)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at java.lang.reflect.Method.invoke(Method.java:521)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at dalvik.system.NativeStart.main(Native Method)
最后自己添加Log.d(),把问题锁定到了dialog.show()这句代码上了,感觉应该还是跟传入的参数有关系,特别是main.this,开始尝试this,getApplicationContext(),,,etc,感觉这个AlertDialog的show方法应该有些问题,肯定有人遇到过这种情况,最后在参考这篇文章的http://stackoverflow.com/questions/1561803/android-progressdialog-show-crashes-with-getapplicationcontext的情况下顺利解决,解决的办法是把onCelick方法传入的View对象也给传进login方法中去,然后使用其getContext方法获取其context,OK,大功告成,终于见到了心仪已久的AlertDialog了
感觉解决起来是挺不容易的,困了将近两天了才终于解决这个问题,不容易,这次也让我学会了使用logcat窗口调试程序了
![](http://hi.csdn.net/attachment/201109/21/0_1316592820W8Gg.gif)
点击FullScreen按钮出现此界面,Cool!!
希望能给遇到这个问题的人一些参考
代码如下
public void Login() { LayoutInflater factory=LayoutInflater.from(main.this); final View v1=factory.inflate(R.layout.login,null); //R.layout.login与login.xml文件名对应,把login转化成View类型 AlertDialog.Builder builder = new AlertDialog.Builder(main.this); AlertDialog dialog = builder.create();//可能是这个问题导致的,context不知道传的对不对,研究一 dialog.setView(v1);//设置使用View //设置控件应该用v1.findViewById 否则出错 dialog.show(); }
但是logcat会打印出出错的信息:
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): FATAL EXCEPTION: main
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.view.ViewRoot.setView(ViewRoot.java:509)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.app.Dialog.show(Dialog.java:241)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at com.mydictionary.www.CustomMenuView.login(CustomMenuView.java:173)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at com.mydictionary.www.CustomMenuView.access$3(CustomMenuView.java:146)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at com.mydictionary.www.CustomMenuView$2.onClick(CustomMenuView.java:139)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.view.View.performClick(View.java:2408)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.view.View$PerformClick.run(View.java:8816)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.os.Handler.handleCallback(Handler.java:587)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.os.Handler.dispatchMessage(Handler.java:92)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.os.Looper.loop(Looper.java:123)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at java.lang.reflect.Method.invokeNative(Native Method)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at java.lang.reflect.Method.invoke(Method.java:521)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-21 07:23:36.023: ERROR/AndroidRuntime(1550): at dalvik.system.NativeStart.main(Native Method)
最后自己添加Log.d(),把问题锁定到了dialog.show()这句代码上了,感觉应该还是跟传入的参数有关系,特别是main.this,开始尝试this,getApplicationContext(),,,etc,感觉这个AlertDialog的show方法应该有些问题,肯定有人遇到过这种情况,最后在参考这篇文章的http://stackoverflow.com/questions/1561803/android-progressdialog-show-crashes-with-getapplicationcontext的情况下顺利解决,解决的办法是把onCelick方法传入的View对象也给传进login方法中去,然后使用其getContext方法获取其context,OK,大功告成,终于见到了心仪已久的AlertDialog了
感觉解决起来是挺不容易的,困了将近两天了才终于解决这个问题,不容易,这次也让我学会了使用logcat窗口调试程序了
![](http://hi.csdn.net/attachment/201109/21/0_1316592820W8Gg.gif)
点击FullScreen按钮出现此界面,Cool!!
希望能给遇到这个问题的人一些参考
相关文章推荐
- 解决 FLex 4.0 Module里面Alert.show();出错问题
- 关于在委托中使用Form ShowDialog 不是模态的问题,使用ShowDialog(this)解决
- 关于AlertDialog中嵌入Edittext无法弹出输入法的问题解决
- 关于JKAlertDialog在多个视图控制器跳转后不能正常显示的问题的解决--IOS
- 关于四六级批量查询系统源码出错问题的解决
- 关于使用SSM整合的时候,使用hibernate校验框架出现500异常问题解决
- 关于spring boot 中App类位置不同导致出错的问题的解决方法
- 关于 C# 调用 ICTCLAS 逐句分词报异常的问题解决
- 关于出现List的java.util.ConcurrentModificationException异常问题的解决
- 关于Myeclipse导入ExtJS出错的问题解决:
- AlertDialog设置其大小为什么老不成功?问题解决。
- 关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法
- 关于Dialog中存在EditView,点击不弹出小键盘问题解决方案
- Android AlertDialog解决点击按钮立即消失的问题
- 关于4.X系统使用安卓5.0Material风格AlertDialog全屏问题
- 关于JOptionPane的showConfirmDialog问题
- 关于dialog的Unable to add window -- is your activity running异常解决。
- 关于spring boot 中App类位置不同导致出错的问题的解决方法
- 关于提示DB2 "打开套接字时出错" 的问题的解决
- 关于无法加载DLL"***.dll":找不到指定的模块(异常来自HRESULT:0x8007007E)问题的解决办法