您的位置:首页 > 其它

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

2011-09-21 16:13 417 查看
学习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!!

希望能给遇到这个问题的人一些参考
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: