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

学习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!!

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值