android.view.InflateException解决办法 | 青训营笔记

382 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第4天

前言

这是我在青训营发表的第四篇笔记,仅以此来记录我在青训营的学习成长历程。

本篇笔记的第一部分为针对android.view.InflateException: Binary XML file问题的解决办法;

第二部分为问题解决后的思考与总结。

一.android.view.InflateException: Binary XML file问题解决办法

最近在写大项目时,与往日直接在AVD上运行Demo不同,想尝试在手机上运行Demo进行Debug,于是在手机上的开发者选项中开启了USB调试,然后进行与Android Studio的链接。

连接成功后运行Demo,但是会运行不成功直接崩溃,手机端显示运行已停止。

微信图片_20220813221605.jpg

然后去Android Studio上查看Logcat,发现报错内容如下:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.qxy.douyinDemo/com.qxy.douyinDemo.ui.activity.MainActivity}: android.view.InflateException: Binary XML file line #15: Binary XML file line #30: Binary XML file line #30: Error inflating class <unknown>
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2492)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2554)
        at android.app.ActivityThread.access$1100(ActivityThread.java:161)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1415)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5624)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

起初以为是XML文件出现了问题,在反复检查后并通过AVD的运行验证后发现XML并没有问题。

然后再仔细看报错代码发现有可能是资源文件未找到,于是查看res下的drawable文件夹,发现只有drawable和drawable-v24文件夹,但是我所用的手机的安卓系统是6.0,安卓6.0的API是23,API低于24的资源文件统一是在drawable-v24和drawable-v21中,于是我将drawable-v24的文件全部复制到drawable-v21中,如图所示。

微信截图_20220813222711.png

之后再运行Demo,发现可以在手机上运行了。

微信图片_20220813224338.jpg

二.思考与总结

虽然看起来只是一个小bug但是却花费了一下午的时间。解决掉后在想为什么会花费这么长时间。认真思考后觉得还是对项目的整体结构的不熟悉所导致的。刚开始觉得是XML出的问题,但是验证过后XML是没有问题的,百思不得其解后去Google,Google出来的结果认为还是XML的问题,我抱着怀疑自己的态度去反复的看XML,发现XML怎么看也没问题。于是直到我再去看报错的代码才意识到有可能是资源文件的问题然后才解决了问题。我认为在做一个项目的时候一定要熟悉整体的架构,并且在遇到bug百思不得其解的时候还是要彻底搞明白bug的问题是出在哪,然后对症下药。