2008年9月16日星期二

Android的InflateException异常

迄今为止已经遇到过2个问题引发了InflateException异常,通常来说,出现这种情况一般都是因为解析器无法正确解析布局文件中的类声明。

第一次遇到这个异常是我使用了google的MapView组件,在我使用代码new MapView()的时候没有任何问题,但是在我使用xml首先进行布局时引用一个MapView实例就出错,总是在MapView这一行出错,eclipse提示的异常是Binary XML文件解析异常,实质就是找不到xml元素对应的类声明。

这是我的xml布局声明:


这个错误的解决是要在AndroidManifest.xml中引入包含MapView的组件包:

第二次遇到这样的错误是我试图使用自定义的组件而引发的,我从LinearLayout继承了一个新的自定义的布局类,在xml布局文件中引用时又引起了InflateException异常。

问题的发生是因为我将这个继承的类放在了当前Activity的同一个包之下,在xml布局文件解析的时候,是没办法找到当前包的自定义类的,解决方法就是把这个类移出去,重构到一个新的包中。比如我的当前项目的包是:wuyf.android.trafficnowmap,原来的类放在wuyf.android.trafficnowmap.MyLinearLayout会引发错误,因此我将其重构到wuyf.android.view.MyLinearLayout,然后一切正常。

总结一下,使用xml布局一定要让xml文件解析的时候可以找到布局文件中使用到的类包,引用第三方的组件需要引入user-library,使用自定义的类则需要注意不要放置在当前包之下。

没有评论: