Android运行时异常:android.view.InflateException: Binary XML file line #354: Error inflating class inclu

来源:互联网 发布:专科 知乎 编辑:程序博客网 时间:2024/05/17 15:41

写代码时遇到bug很正常 , 但是如果遇到那种没有思路的bug是件非常痛苦的事情 , 但是很多时候当你把bug解决了再回头看 , 就会发现 , 我曹 , 这么低级的错误我怎么没有找到 .
废话几句 , 说说自己的心得 . 遇到bug首先要定位问题 , 定位到问题 , bug就解决了一般 . 以这个bug为例 , 运行程序时出现这个问题时 , 这个错误的核心就是Binary XML file line #354,就是在相应Activity所对应的布局XML文件中所使用的组件或者组件内部调用资源信息错误,Binary XML file line #354的意思是在我布局的XML文件中第354行出现错误 . 好的 , 现在已经定位了问题 , 现在就要仔细排查这部分代码了 , 我的这个bug很低级 , include布局时 , 居然将include写成了inclu , AndroidStudio居然没有报错 , 蛋疼 .
很多童鞋总结了解决这种bug的思路 , 我把他们的复制过来 , 提供给大家参考 , 也是自己涨姿势.

大致有以下几种方式来解决:

  • 引用类名问题:自定义了一个View,将他用于布局文件中,假设他的包名叫MyPackage,类名叫MyTestView,这个时候你在XML作为布局元素来布局的话,必须使用完整路径名,也就是包名加类名来引用,用MyPackage.MyTestView来进行引用。

  • 构造函数问题:自定义一个View,必须派生实现基类View的三个构造函数

    View(Context context) //Simple constructor to use when creating a view from code

    View(Context context, AttributeSet attrs) //Constructor that is called when inflating a view from XML

    View(Context context, AttributeSet attrs, int defStyle) //Perform inflation from XML and apply a class-specific base style

    从文档上的介绍来看,第二个和第三个构造函数对于XML这种引用方式是必须实现的,这三个构造函数应该是在不同的应用场合来实例化一个View对象。

  • 编译的中间文件没有清理干净:第三种就是你在原生系统代码的编译环境下编译APK之后,特别是修改了XML,出现标题所述现象,这个时候你只需要删除out目录下编译生成的中间文件夹即可(具体名字记不清了:在编译过程中,系统会将那个位置打印出来,通过串口来看吧,…/out/……/…./classes.dex,你循着这个路径往前推到你的应用的project名字那一层文件夹),删除再重新make就OK了。

  • 找不到资源文件:我原来在2.3的原生系统增加动态壁纸的时候,动态壁纸一跑起来就出这个异常,然后crash,当时就是因为找不到drawable的资源文件,于是当时我把drawable的hdpi或nodpi等文件夹的图片资源都拷贝一份到drawble下,问题解决(当时一直不明白系统会根据分辨率来选择加载不同drawable下文件夹的资源,为什么这里必须放入drawable中)。


阅读全文
1 0