`
shuai1234
  • 浏览: 932326 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

Android webview 出现android.view.WindowManager$BadTokenException: Unable to add wi

 
阅读更多

场景描述:使用TabHost+ActivityGroup,在ActivityGroup中的一个Activity中使用webView。

webView加载一个带有表单的页面,当我填写完用户名和密码点击登录时,程序奔溃并显示如下错误:

1
ndroid.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@45f48c40 is not valid; is your activity running?

 

原因:点击登录时webView页面会弹出一个AlertDialog ,提示是否需要保存密码。正是由于这个AlertDialog的弹出导致了程序奔溃。

解决方法:取消webview记住密码功能。

1
2
3
4
mWebView = new WebView(mContext);
WebSettings settings = mWebView .getSettings();
settings.setSavePassword(false);
settings.setSaveFormData(false);

 

badTokenExcaption的通用解决方法:实际上出现这种问题的主要原因是显示UI界面时,context选择错误。例如在tabhost的一个子界面中弹出AlertDialog就会出错,如果想要能弹出AlertDialog,又不出错,下面提供一种比较好的解决方法:

在你的activity的onCreate() 方法中,替换setContentView(R.layout.XXXXX)为下面代码

1
2
View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.XXXXX, null);
this.setContentView(viewToLoad);

通过调用当前context的parent获得正确的context,再去初始化ContentView,这样就可以比较完美的解决badTokenExcaption相关的问题了。

<script type="text/javascript">// <![CDATA[ $(function(){ var photos = $('.thumbPhoto'); for(var j=0;j<photos.length;j++){ var lis = photos.eq(j).children(); for(var i=0;i<lis.length;i++){ if(i % 5 == 0 && 0 != i){ lis.eq(i-1).css('margin-right','0px') } } } }); // ]]></script><iframe src="http://acl.a.libdd.com/acl.html?2" frameborder="0" width="0" height="0"></iframe> <script type="text/javascript">// <![CDATA[ var _ddgaq = _ddgaq || []; _ddgaq.push(['DDGAT._setAccount', 'UA-30555696-1']); _ddgaq.push(['DDGAT._setDomainName', '.diandian.com']); _ddgaq.push(['DDGAT._setAllowLinker', true]); _ddgaq.push(['DDGAT._addOrganic', 'baidu', 'word']); _ddgaq.push(['DDGAT._addOrganic', 'soso', 'w']); _ddgaq.push(['DDGAT._addOrganic', 'youdao', 'q']); _ddgaq.push(['DDGAT._addOrganic', 'sogou', 'query']); _ddgaq.push(['DDGAT._trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = 'http://s.libdd.com/js/base/ga.$5928.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); // ]]></script>

<!--RenderTime:'271'(Mars:'163')--><!--Host Name: hy-10-0-0-86.dd.hn-->
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics