关于AlertDialog中不可思议的dialog.show()异常出错的问题的解决

来源:互联网 发布:淘宝客软件多少钱 编辑:程序博客网 时间:2024/05/03 21:00

学习java连带着学习android应用开发应该差不多两个星期了吧,开始有点儿慢慢适应了,现在着手尝试修改别人的程序代码来创建自己所需要的东西,但是最近需要在一个popupwindow窗口中启动一个dialog,我是先尝试着把这篇博客里给的简单代码贴到我的程序里面,http://blog.163.com/wangkangming2008@126/blog/static/7827792820110910392369/这是链接

代码如下

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窗口调试程序了

点击FullScreen按钮出现此界面,Cool!!

希望能给遇到这个问题的人一些参考

原创粉丝点击