android.view.InflateException:膨胀类 androidx.constraintlayout.widget.ConstraintLayout 时出错

Posted

技术标签:

【中文标题】android.view.InflateException:膨胀类 androidx.constraintlayout.widget.ConstraintLayout 时出错【英文标题】:android.view.InflateException: Error inflating class androidx.constraintlayout.widget.ConstraintLayout 【发布时间】:2020-07-28 16:02:12 【问题描述】:

我有一个非常令人沮丧的错误,我无法解释。我创建了一个使用 androidx AppCompat 使其与旧版本兼容的 Android 应用程序。这是我的主要活动布局文件: Androidx。

这是我的 java 文件:

public class SplashScreen extends AppCompatActivity 

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_screen);
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() 
        @Override
        public void run() 
            startActivity(new Intent(SplashScreen.this, MainActivity.class));
            finish();
        
    , 1500);

这是我的 xml 文件:

<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:background="@drawable/splash_screen"
tools:context=".Activities.SplashScreen">

这是我的 gradle 文件

android 
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig 
    applicationId "com.example.bloodbank"
    minSdkVersion 15
    targetSdkVersion 29
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

buildTypes 
    release 
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    

gradle 文件中的依赖项

dependencies 
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

主要问题是我的应用程序说不幸的是应用程序已停止这是运行选项卡中的详细信息

D/skia: --- 缩放位图分配失败 D/AndroidRuntime: 关闭 VM E/AndroidRuntime: FATAL EXCEPTION: main 进程:com.example.bloodbank,PID:3542 java.lang.RuntimeException:无法启动活动 ComponentInfocom.example.bloodbank/com.example.bloodbank.Activities.SplashScreen: android.view.InflateException:二进制 XML 文件第 2 行:错误 膨胀类 androidx.constraintlayout.widget.ConstraintLayout 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在 android.app.ActivityThread.access$800(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 引起:android.view.InflateException:二进制 XML 文件第 2 行:错误膨胀类 androidx.constraintlayout.widget.ConstraintLayout 在 android.view.LayoutInflater.createView(LayoutInflater.java:633) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:482) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:365) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 在 com.example.bloodbank.Activities.SplashScreen.onCreate(SplashScreen.java:16) 在 android.app.Activity.performCreate(Activity.java:5990) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在 android.app.ActivityThread.access$800(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Constructor.newInstance(Native Method) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:288) 在 android.view.LayoutInflater.createView(LayoutInflater.java:607) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:482) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:365) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 在 com.example.bloodbank.Activities.SplashScreen.onCreate(SplashScreen.java:16) 在 android.app.Activity.performCreate(Activity.java:5990) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在 android.app.ActivityThread.access$800(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 原因:java.lang.OutOfMemoryError:无法分配 711998476 字节分配,1048576 空闲字节和 383MB 直到 OOM 在 dalvik.system.VMRuntime.newNonMovableArray(本机方法) 在 android.graphics.BitmapFactory.nativeDecodeAsset(本机方法) 在 android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609) 在 android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444) 在 android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:988) 在 android.content.res.Resources.loadDrawableForCookie(Resources.java:2474) 在 android.content.res.Resources.loadDrawable(Resources.java:2381) 在 android.content.res.TypedArray.getDrawable(TypedArray.java:749) 在 android.view.View.(View.java:3737) 在 android.view.ViewGroup.(ViewGroup.java:497) 在 android.view.ViewGroup.(ViewGroup.java:493) 在 android.view.ViewGroup.(ViewGroup.java:489) 在 androidx.constraintlayout.widget.ConstraintLayout.(ConstraintLayout.java:575) 在 java.lang.reflect.Constructor.newInstance(Native Method) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:288) 在 android.view.LayoutInflater.createView(LayoutInflater.java:607) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:482) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:365) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 在 com.example.bloodbank.Activities.SplashScreen.onCreate(SplashScreen.java:16) 在 android.app.Activity.performCreate(Activity.java:5990) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在 android.app.ActivityThread.access$800(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 进程 3542 已终止。

它在splashcreen.java 的第 16 行显示错误 请帮助我清除此错误。

谢谢

【问题讨论】:

请在定义约束布局依赖的地方添加 gradle 文件 您的代码看起来不错,但请检查您的 androidx.constraintlayout 的结束标记是否正确。它应该以 /> 结尾 结束标签正确关闭。没有语法错误。构建正确完成,但在运行应用程序时崩溃。(我在发布问题时错过了该代码的结束标记。对此感到抱歉) 我添加了我的 gradle 文件。请看一下! 您可能有一些在编辑器中看不到的特殊字符。错误很简单:InflateException: Binary XML file line #2: Error inflating class 【参考方案1】:

你实际上得到了一个OutOfMemoryException。当您将高分辨率图像直接放在视图中时,就会发生这种情况。在你的情况下,可能是@drawable/splash_screen

查看this similar question。为它提供了答案。

【讨论】:

【参考方案2】:

我不确定您粘贴的 XML 是否完整。如果是,那就是那里的错误。约束布局需要一个结束标签。

【讨论】:

结束标签正确关闭。我错过了把它贴在这里。

以上是关于android.view.InflateException:膨胀类 androidx.constraintlayout.widget.ConstraintLayout 时出错的主要内容,如果未能解决你的问题,请参考以下文章