解决4.0以下继承PopupWindow报空指针的bug
2015-01-14 13:40
274 查看
最近发现通过继承PopupWindow的自定义弹窗在4.0以下版本中闪退,报NullPointerException.在网上找了一些回答,都不靠谱,没有解决问题.
最好只好通过自己查看源码找出原因。
首先查看报错信息,逐步分析
![](https://img-blog.csdn.net/20150114152434332?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemE1NDE5NDc5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
发现PopupWindow.setContentView方法报错,到源码级了,首先想到对象的构建过程,通过继承父类,实例化的时候会先调用父类的构造函数,一般都没有指定,所以调用的是父类默认的构造函数,现在来看看源码
发现Popwindow有这些构造函数,默认是不带参数的,从PopupWindow()
![](https://img-blog.csdn.net/20150114152640505?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemE1NDE5NDc5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20150114152912948?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemE1NDE5NDc5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
已经找到报错的方法setContentView()
直接查看代码
![](https://img-blog.csdn.net/20150114153012962?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemE1NDE5NDc5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
发现这里没有判断就直接调用了,所以运行就报 空指针了。
我们再来看看为什么4.0以上版本没有问题。
直接查看4.0源码中这个方法的代码
![](https://img-blog.csdn.net/20150114153258696?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemE1NDE5NDc5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这里加了一个非空判断,所以就没有问题了。这里感叹一下,谷歌的大神们竟然会犯这么低级的错误,幸好还是在新版中更正过来了。这里也说明了代码的健壮性很重要。
知道原因了,解决此问题就好办了,我的方法是,竟然默认构造方法出错,我们就不调用默认的,首先我们看看源码
![](https://img-blog.csdn.net/20150114165221946?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemE1NDE5NDc5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
发现其实有两套构造方法,我们选择传入Context试一试,就是在自定义PopupWindow构造函数中第一行加入super(Context)
例:
public class MyPopWin extends PopupWindow {
public CategoryDialog(Context context) {
super(context);
//......
}
}
发现不会报错了。
很多时候查看源码会有一些意想不到的东西。
转载请注明出处.http://blog.csdn.net/za5419479/article/details/42708757
最好只好通过自己查看源码找出原因。
首先查看报错信息,逐步分析
发现PopupWindow.setContentView方法报错,到源码级了,首先想到对象的构建过程,通过继承父类,实例化的时候会先调用父类的构造函数,一般都没有指定,所以调用的是父类默认的构造函数,现在来看看源码
发现Popwindow有这些构造函数,默认是不带参数的,从PopupWindow()
已经找到报错的方法setContentView()
直接查看代码
发现这里没有判断就直接调用了,所以运行就报 空指针了。
我们再来看看为什么4.0以上版本没有问题。
直接查看4.0源码中这个方法的代码
这里加了一个非空判断,所以就没有问题了。这里感叹一下,谷歌的大神们竟然会犯这么低级的错误,幸好还是在新版中更正过来了。这里也说明了代码的健壮性很重要。
知道原因了,解决此问题就好办了,我的方法是,竟然默认构造方法出错,我们就不调用默认的,首先我们看看源码
发现其实有两套构造方法,我们选择传入Context试一试,就是在自定义PopupWindow构造函数中第一行加入super(Context)
例:
public class MyPopWin extends PopupWindow {
public CategoryDialog(Context context) {
super(context);
//......
}
}
发现不会报错了。
很多时候查看源码会有一些意想不到的东西。
转载请注明出处.http://blog.csdn.net/za5419479/article/details/42708757
相关文章推荐
- 解决4.0以下, PopupWindow问题
- 善用encodeURI解决AJAX在IE10以下浏览器中的莫名BUG
- 解决TabControl的BUG(涉及Framework4.0以下所有版本)
- 解决PopupWindow在7.0以上位置不正确的bug
- IE6下li会继承ul属性的bug、产生条件、解决办法
- 解决了一个butterknife,报空指针的bug
- Android开发解决加载图片OOM问题(非常全面 兼顾4.0以下系统)(by 星空武哥)
- 如何解决asp.net 在vs2010(.net framework 4.0)中listview控件用jquery,javascript为模版中的服务端控件注入事件的方法?因为vs2010在这个方面有存在的bug!
- 67为什么Popupwindow加上动画效果,但是动画效果去出不来的BUG的解决
- javamail 解决1.4空指针bug以及与cxf包冲突问题
- 【IE bug 解决办法】IE下(IE10及以下)当元素为absolute定位时,点击事件失效的解决办法
- 解决popupwindow中弹出输入法被挤上去 顶起的bug
- 解决delphi2010 无法继承窗体的bug
- 解决delphi2010 无法继承窗体的bug
- 解决PopupWindow在7.0以上位置不正确的bug
- Android中EditText光标在4.0中的bug及解决方法
- Android7.0中关于popupWindow的bug解决办法
- web前端,兼容IE6有以下BUG的解决方法
- 【IE bug 解决办法】IE下(IE10及以下)当元素为absolute定位时,点击事件失效的解决办法 分类: ie ie bug ie absolute click 2015-06-26 11:05 21人阅读 评论(0) 收藏
- ubuntu鼠标指针的bug及解决~