当我在NavigationView中添加headerLayout时,为什么我的应用程序在启动时崩溃?

时间:2018-01-20 19:17:55

标签: android

我很快就会成为自学成才的软件开发人员,我还在学习。我试图制作导航抽屉。我的问题是当我在NavigationView Ex:app:headerLayout" @ layout / headerLayout"中添加headerLayout时,我的应用程序在启动时一直崩溃。当我删除headerLayout时,该应用程序完全正常。但该应用程序在Android工作室预览模拟器上看起来很好,但是当我在genymotion中运行应用程序时,它在启动时崩溃。我甚至试图在genymotion中以不同的API级别运行应用程序,但它仍然崩溃。谢谢你的助手。

Manifest File:

    <?xml version="1.0" encoding="utf-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.example.android.drawer">

            <application
                android:allowBackup="true"
                android:icon="@mipmap/ic_launcher"
                android:label="@string/app_name"
                android:roundIcon="@mipmap/ic_launcher_round"
                android:supportsRtl="true"
                android:theme="@style/AppTheme">
                <activity android:name=".MainActivity">
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN" />

                        <category android:name="android.intent.category.LAUNCHER" />
                    </intent-filter>
                </activity>
            </application>

        </manifest>





  build.gradle(Module: app)



     apply plugin: 'com.android.application'

        android {
            compileSdkVersion 26
            defaultConfig {
                applicationId "com.example.android.drawer"
                minSdkVersion 23
                targetSdkVersion 26
                versionCode 1
                versionName "1.0"
                testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            }
            buildTypes {
                release {
                    minifyEnabled false
                    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                }
            }
        }

        dependencies {
            implementation fileTree(dir: 'libs', include: ['*.jar'])
            implementation 'com.android.support:appcompat-v7:26.1.0'
            implementation 'com.android.support:design:26.1.0'
            implementation 'com.android.support.constraint:constraint-layout:1.0.2'
            testImplementation 'junit:junit:4.12'

            androidTestImplementation 'com.android.support.test:runner:0.5'
            androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2'
        }

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    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_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.android.drawer.MainActivity">

    <android.support.design.widget.NavigationView
        android:fitsSystemWindows="true"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:layout_gravity="left"
        app:itemTextColor="@color/darkgray"
        app:headerLayout="@layout/header"
        app:itemIconTint="@color/darkgray"
        app:menu="@menu/drawermenu">

    </android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

MainActivity.class



public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }}


drawermenu.xml

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">

        <item
            android:title="Dashboard"
            android:id="@+id/dashboard"
            android:icon="@drawable/ic_dashboard_black_24px"/>

        <item
            android:title="Event"
            android:id="@+id/event"
            android:icon="@drawable/ic_event_black_24px"/>

        <item
            android:title="Search"
            android:id="@+id/search"
            android:icon="@drawable/ic_search_black_24px"/>

        <item
            android:title="Settings"
            android:id="@+id/settings"
            android:icon="@drawable/ic_settings_black_24px"/>

        <item
            android:title="activities"
            android:id="@+id/Activities"
            android:icon="@drawable/ic_account_circle_black_24px"/>

        <item
            android:title="Logout"
            android:id="@+id/logout"
            android:icon="@drawable/ic_lock_black_24px"/>

    </menu>

header.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="160dp"
        android:background="@drawable/fractal"
        android:padding="10dp">

        <ImageView
            app:srcCompat="@drawable/hell"
            android:layout_width="75dp"
            android:layout_height="75dp"/>

        <TextView
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="@string/myName"
            android:textStyle="bold"
            android:textColor="@color/white"
            android:layout_marginTop="5dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/yourEmail"
            android:textStyle="bold"
            android:textColor="@color/white"
            android:layout_marginTop="5dp"/>

    </LinearLayout>

StackTrace of crash:

    01-22 17:57:31.293 1706-1706/com.example.android.drawer E/AndroidRuntime: FATAL EXCEPTION: main
                                                                              Process: com.example.android.drawer, PID: 1706
                                                                              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.drawer/com.example.android.drawer.MainActivity}: android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class android.support.design.widget.NavigationView
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                                                                                  at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                  at android.os.Looper.loop(Looper.java:154)
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                                                                               Caused by: android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class android.support.design.widget.NavigationView
                                                                               Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class android.support.design.widget.NavigationView
                                                                               Caused by: java.lang.reflect.InvocationTargetException
                                                                                  at java.lang.reflect.Constructor.newInstance0(Native Method)
                                                                                  at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
                                                                                  at android.view.LayoutInflater.createView(LayoutInflater.java:645)
                                                                                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:787)
                                                                                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
                                                                                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
                                                                                  at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
                                                                                  at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
                                                                                  at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
                                                                                  at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
                                                                                  at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
                                                                                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
                                                                                  at com.example.android.drawer.MainActivity.onCreate(MainActivity.java:17)
                                                                                  at android.app.Activity.performCreate(Activity.java:6664)
                                                                                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                                                                                  at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                  at android.os.Looper.loop(Looper.java:154)
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                                                                               Caused by: android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class <unknown>
                                                                               Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class <unknown>
                                                                               Caused by: java.lang.reflect.InvocationTargetException
                                                                                  at java.lang.reflect.Constructor.newInstance0(Native Method)
                                                                                  at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
                                                                                  at android.view.LayoutInflater.createView(LayoutInflater.java:645)
                                                                                  at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
                                                                                  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:717)
                                                                                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:785)
                                                                                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
                                                                                  at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
                                                                                  at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
    01-22 17:57:31.297 1706-1706/com.example.android.drawer E/AndroidRuntime:     at android.support.design.internal.NavigationMenuPresenter.inflateHeaderView(NavigationMenuPresenter.java:211)
                                                                                  at android.support.design.widget.NavigationView.inflateHeaderView(NavigationView.java:267)
                                                                                  at android.support.design.widget.NavigationView.<init>(NavigationView.java:176)
                                                                                  at android.support.design.widget.NavigationView.<init>(NavigationView.java:98)
                                                                                  at java.lang.reflect.Constructor.newInstance0(Native Method)
                                                                                  at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
                                                                                  at android.view.LayoutInflater.createView(LayoutInflater.java:645)
                                                                                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:787)
                                                                                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
                                                                                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
                                                                                  at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
                                                                                  at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
                                                                                  at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
                                                                                  at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
                                                                                  at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
                                                                                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
                                                                                  at com.example.android.drawer.MainActivity.onCreate(MainActivity.java:17)
                                                                                  at android.app.Activity.performCreate(Activity.java:6664)
                                                                                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                                                                                  at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                  at android.os.Looper.loop(Looper.java:154)
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                                                                               Caused by: java.lang.OutOfMemoryError: Failed to allocate a 432000012 byte allocation with 6111604 free bytes and 87MB until OOM
                                                                                  at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
                                                                                  at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
                                                                                  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620)
                                                                                  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455)
                                                                                  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1152)
                                                                                  at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720)
                                                                                  at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)
                                                                                  at android.content.res.Resources.loadDrawable(Resources.java:854)
                                                                                  at android.content.res.TypedArray.getDrawable(TypedArray.java:928)
                                                                                  at android.view.View.<init>(View.java:4174)
                                                                                  at android.view.ViewGroup.<init>(ViewGroup.java:578)
                                                                                  at android.widget.LinearLayout.<init>(LinearLayout.java:211)
                                                                                  at android.widget.LinearLayout.<init>(LinearLayout.java:207)
                                                                                  at android.widget.LinearLayout.<init>(LinearLayout.java:203)
                                                                                    ... 38 more

1 个答案:

答案 0 :(得分:0)

如果你向下看堆栈跟踪,你会发现这一行: Caused by: java.lang.OutOfMemoryError: Failed to allocate a 432000012 byte allocation with 6111604 free bytes and 87MB until OOM

我从未使用过GenyMotion,但他们的文档在查找VM的内存增加时会显示: https://docs.genymotion.com/Content/03_Virtual_Devices/Managing_virtual_devices/Configuring_a_virtual_device.htm?Highlight=memory