一个InflateException异常耗费了我好长时间,网上各种查,发现每个人遇到的情况都不一样,今天我总结了一下,希望对大家有帮助。最后发现是我自定义的包名写错了。
我遇到的情况:
图片:
代码部分:<span style="color: rgb(123, 123, 123);">08-20 16:38:41.894 24115-24115/com.ncsyeyy.iBankUip W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41cc9700)08-20 16:38:41.904 24115-24115/com.ncsyeyy.iBankUip E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ncsyeyy.iBankUip/com.ncsyeyy.iBankUip.ui.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class com.ncsyeyy.iBank.app.SlidingMenu at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349) at android.app.ActivityThread.access$700(ActivityThread.java:159) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5419) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class com.ncsyeyy.iBank.app.SlidingMenu </span><span style="color:#ff0000;">→找到SlidingMenu布局文件发现自定义的控件引用的包名出错了</span><span style="color:#7b7b7b;"> at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) at android.view.LayoutInflater.inflate(LayoutInflater.java:470) at android.view.LayoutInflater.inflate(LayoutInflater.java:398) at android.view.LayoutInflater.inflate(LayoutInflater.java:354) at com.ncsyeyy.iBankUip.app.SlidingActivityHelper.onCreate(SlidingActivityHelper.java:43) at com.ncsyeyy.iBankUip.ui.BaseSlidingFragmentActivity.onCreate(BaseSlidingFragmentActivity.java:24) at com.ncsyeyy.iBankUip.ui.MainActivity.onCreate(MainActivity.java:34) at android.app.Activity.performCreate(Activity.java:5372) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) at com.qihoo360.mobilesafe.loader.b.callActivityOnCreate(SourceFile:98) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349) at android.app.ActivityThread.access$700(ActivityThread.java:159) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5419) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.ncsyeyy.iBank.app.SlidingMenu" on path: /data/app/com.ncsyeyy.iBankUip-2.apk at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:64) at java.lang.ClassLoader.loadClass(ClassLoader.java:501) at java.lang.ClassLoader.loadClass(ClassLoader.java:461) at android.view.LayoutInflater.createView(LayoutInflater.java:565) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) at android.view.LayoutInflater.inflate(LayoutInflater.java:470) at android.view.LayoutInflater.inflate(LayoutInflater.java:398) at android.view.LayoutInflater.inflate(LayoutInflater.java:354) at com.ncsyeyy.iBankUip.app.SlidingActivityHelper.onCreate(SlidingActivityHelper.java:43) at com.ncsyeyy.iBankUip.ui.BaseSlidingFragmentActivity.onCreate(BaseSlidingFragmentActivity.java:24) at com.ncsyeyy.iBankUip.ui.MainActivity.onCreate(MainActivity.java:34) at android.app.Activity.performCreate(Activity.java:5372) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) at com.qihoo360.mobilesafe.loader.b.callActivityOnCreate(SourceFile:98) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349) at android.app.ActivityThread.access$700(ActivityThread.java:159) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5419) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) at dalvik.system.NativeStart.main(Native Method)</span><span style="color:#ff0000;">com.ncsyeyy.iBankUip.app.SlidingMenu →包名写错,注意,对应改过来就好了</span><?xml version="1.0" encoding="utf-8"?><com.ncsyeyy.iBankUip.app.SlidingMenu xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/slidingmenumain" android:layout_width="fill_parent" android:layout_height="fill_parent" />网上总结1
- 05-17 15:19:08.600: E/AndroidRuntime(1006): FATAL EXCEPTION: main
- 05-17 15:19:08.600: E/AndroidRuntime(1006): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pinky.android.wsmarked/com.pinky.android.wsmarked.WSMarkedActivity}: android.view.InflateException: Binary XML file line #10: Error inflating class TextEdit
- 05-17 15:19:08.600: E/AndroidRuntime(1006): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1654)
- 05-17 15:19:08.600: E/AndroidRuntime(1006): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1670)
- 05-17 15:19:08.600: E/AndroidRuntime(1006): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
- 05-17 15:19:08.600: E/AndroidRuntime(1006): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
- 05-17 15:19:08.600: E/AndroidRuntime(1006): at android.os.Handler.dispatchMessage(Handler.java:99)
- 05-17 15:19:08.600: E/AndroidRuntime(1006): at android.os.Looper.loop(Looper.java:123)
- 05-17 15:19:08.600: E/AndroidRuntime(1006): at android.app.ActivityThread.main(ActivityThread.java:3695)
- 05-17 15:19:08.600: E/AndroidRuntime(1006): at java.lang.reflect.Method.invoke(Method.java:507)
- 05-17 15:19:08.600: E/AndroidRuntime(1006): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
- 05-17 15:19:08.600: E/AndroidRuntime(1006): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
- 05-17 15:19:08.600: E/AndroidRuntime(1006): at dalvik.system.NativeStart.main(Native Method)
重新认真地检查xml文件,还是没有发现任何问题。谷歌,发现出现这种异常,基本与相应的xml的标签和属性的命名、定义有关。再对比以前写的xml,终于找到了错误!控件EditText被我写成了TextView~ 修改后,程序终于OK~
总结一下xml文件经常容易犯的低级错误:
1. 控件名称不能写错(我上面就属于这种情况)
2.名称的大小写要区分,如EditText与editText是完全不一样的
3.标签一定是成对出现的,尤其是嵌套布局
4.属性前面一般要加android:
5.id比较特殊,应该是@+id ,其它的直接加@即可,如@string
6.drawable中引用的图片资源不存在或名称大小写有误
网上总结2:
Android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”
今天写程序发现一个问题,就是XML中报出android.view.InflateException异常,可能的原因有:
1.XML中使用到得组件名称是否书写正确(包名+类名),可以使用crtl+鼠标点击看能不能跳转到该组件的定义的地方,可以的话就不是这个问题,如果不可以的话,就是这个问题
2.抛出异常时的main.xml与自定义View类相关代码如下:就是自定义的组件中的构造方法有没有书写正确
main.xml
继承View的类Chessboard.java:
对于此异常,如下进行修改:添加View类的另一个构造方法
3.这个问题很是蛋疼,也是我遇到的问题,搞了我一天的时间,就是工程的编码问题,场景是:从github上下载一个开源组件demo,导入到本地的Eclispe中,就是报错,开始因为是上述的两个问题,但是最后发现都不是,然后又以为是Eclipse版本或者是SDK,ADT这样的版本的问题,耗费了我好长时间,最后想起来github上的这些开源都是老外们写的东东,肯定用的是UTF-8编码的,但是我本地Eclipse的编码是GBK,所以我立马改了一下编码,终于解决了,所以在这里深深的体会到,在使用Eclipse导入工程的时候,还用注意编码的问题,切记!
4.这个问题也是不难发现的,不会经常遇到,就是在多屏适配的时候,比如你在values-sw720文件夹中定义了dimens的一个尺寸,但是没有在values中定义相应的尺寸大小,然后在xml中使用了这个dimens尺寸,当你运行程序到720p(三星平板)的设备上是没有问题的,如果将程序跑在480的设备上,就会出现这种异常(原因是480设备可能会从values文件夹中查找尺寸,找不到出错),这个问题很难发现。所以我们在做屏幕适配工作的时候,一定要谨慎。