android.view.InflateException异常出现情况的总结

时间:2021-09-05 23:28:19
一个InflateException异常耗费了我好长时间,网上各种查,发现每个人遇到的情况都不一样,今天我总结了一下,希望对大家有帮助。最后发现是我自定义的包名写错了。
我遇到的情况:
图片:
android.view.InflateException异常出现情况的总结android.view.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
Java代码  android.view.InflateException异常出现情况的总结
  1. 05-17 15:19:08.600: E/AndroidRuntime(1006): FATAL EXCEPTION: main  
  2. 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  
  3. 05-17 15:19:08.600: E/AndroidRuntime(1006):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1654)  
  4. 05-17 15:19:08.600: E/AndroidRuntime(1006):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1670)  
  5. 05-17 15:19:08.600: E/AndroidRuntime(1006):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)  
  6. 05-17 15:19:08.600: E/AndroidRuntime(1006):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)  
  7. 05-17 15:19:08.600: E/AndroidRuntime(1006):     at android.os.Handler.dispatchMessage(Handler.java:99)  
  8. 05-17 15:19:08.600: E/AndroidRuntime(1006):     at android.os.Looper.loop(Looper.java:123)  
  9. 05-17 15:19:08.600: E/AndroidRuntime(1006):     at android.app.ActivityThread.main(ActivityThread.java:3695)  
  10. 05-17 15:19:08.600: E/AndroidRuntime(1006):     at java.lang.reflect.Method.invoke(Method.java:507)  
  11. 05-17 15:19:08.600: E/AndroidRuntime(1006):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)  
  12. 05-17 15:19:08.600: E/AndroidRuntime(1006):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)  
  13. 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

android.view.InflateException异常出现情况的总结

继承View的类Chessboard.java:

android.view.InflateException异常出现情况的总结

对于此异常,如下进行修改:添加View类的另一个构造方法

android.view.InflateException异常出现情况的总结

3.这个问题很是蛋疼,也是我遇到的问题,搞了我一天的时间,就是工程的编码问题,场景是:从github上下载一个开源组件demo,导入到本地的Eclispe中,就是报错,开始因为是上述的两个问题,但是最后发现都不是,然后又以为是Eclipse版本或者是SDK,ADT这样的版本的问题,耗费了我好长时间,最后想起来github上的这些开源都是老外们写的东东,肯定用的是UTF-8编码的,但是我本地Eclipse的编码是GBK,所以我立马改了一下编码,终于解决了,所以在这里深深的体会到,在使用Eclipse导入工程的时候,还用注意编码的问题,切记!

4.这个问题也是不难发现的,不会经常遇到,就是在多屏适配的时候,比如你在values-sw720文件夹中定义了dimens的一个尺寸,但是没有在values中定义相应的尺寸大小,然后在xml中使用了这个dimens尺寸,当你运行程序到720p(三星平板)的设备上是没有问题的,如果将程序跑在480的设备上,就会出现这种异常(原因是480设备可能会从values文件夹中查找尺寸,找不到出错),这个问题很难发现。所以我们在做屏幕适配工作的时候,一定要谨慎。