错误在一个活动上膨胀类

时间:2014-09-15 19:48:54

标签: android

我的应用程序崩溃了一个活动。我不明白为什么只是这一个。我想知道这是否只是一个错字。

这是错误:

09-15 15:30:52.541  16828-16828/dyson.cornell.edu.womeninleadership E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{dyson.cornell.edu.womeninleadership/dyson.cornell.edu.womeninleadership.SpeakerElement}: android.view.InflateException: Binary XML file line #15: Error inflating class <unknown>
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
        at android.app.ActivityThread.access$700(ActivityThread.java:143)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4962)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: android.view.InflateException: Binary XML file line #15: Error inflating class <unknown>
        at android.view.LayoutInflater.createView(LayoutInflater.java:619)
        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:666)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
        at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:318)
        at android.app.Activity.setContentView(Activity.java:1914)
        at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:216)
        at android.support.v7.app.ActionBarActivityDelegateICS.setContentView(ActionBarActivityDelegateICS.java:110)
        at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76)
        at dyson.cornell.edu.womeninleadership.SpeakerElement.onCreate(SpeakerElement.java:22)
        at android.app.Activity.performCreate(Activity.java:5160)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
            at android.app.ActivityThread.access$700(ActivityThread.java:143)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4962)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
            at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.constructNative(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
        at android.view.LayoutInflater.createView(LayoutInflater.java:593)
            at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
            at android.view.LayoutInflater.onCreateView(LayoutInflater.java:666)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:318)
            at android.app.Activity.setContentView(Activity.java:1914)
            at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:216)
            at android.support.v7.app.ActionBarActivityDelegateICS.setContentView(ActionBarActivityDelegateICS.java:110)
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76)
            at dyson.cornell.edu.womeninleadership.SpeakerElement.onCreate(SpeakerElement.java:22)
            at android.app.Activity.performCreate(Activity.java:5160)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
            at android.app.ActivityThread.access$700(ActivityThread.java:143)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4962)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
            at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.OutOfMemoryError
        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:605)
        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:453)
        at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:813)
        at android.content.res.Resources.loadDrawable(Resources.java:2277)
        at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
        at android.widget.ImageView.<init>(ImageView.java:126)
        at android.widget.ImageView.<init>(ImageView.java:116)
            at java.lang.reflect.Constructor.constructNative(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
            at android.view.LayoutInflater.createView(LayoutInflater.java:593)
            at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
            at android.view.LayoutInflater.onCreateView(LayoutInflater.java:666)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:318)
            at android.app.Activity.setContentView(Activity.java:1914)
            at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:216)
            at android.support.v7.app.ActionBarActivityDelegateICS.setContentView(ActionBarActivityDelegateICS.java:110)
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76)
            at dyson.cornell.edu.womeninleadership.SpeakerElement.onCreate(SpeakerElement.java:22)
            at android.app.Activity.performCreate(Activity.java:5160)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
            at android.app.ActivityThread.access$700(ActivityThread.java:143)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4962)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
            at dalvik.system.NativeStart.main(Native Method)

以下是活动崩溃的布局:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" android:layout_height="match_parent">
        <TextView
            android:id="@+id/speakerElementName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Name"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:layout_marginTop="10dp"
            android:layout_centerHorizontal="true"/>
        <ImageView
            android:id="@+id/speakerElementPicture"
            android:src="@drawable/dash"
            android:layout_below="@id/speakerElementName"
            android:layout_width="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="10dp"
            android:layout_height="150dp"
            android:contentDescription="@string/bios" />
        <TextView
            android:id="@+id/speakerElementPosition"
            android:text="Head of marketing and sales"
            android:layout_below="@id/speakerElementPicture"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/speakerElementBio"
            android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed neque ut tortor ullamcorper laoreet. Suspendisse pellentesque sagittis felis, eget vestibulum ante lobortis lobortis. Duis mauris justo, elementum nec euismod quis, suscipit sed tortor. Vestibulum euismod vestibulum pellentesque"
            android:layout_marginLeft="40dp"
            android:layout_below="@id/speakerElementPosition"
            android:layout_marginTop="20dp"
            android:layout_centerHorizontal="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>
</ScrollView>

来自我的清单:

    <activity
        android:name=".SpeakerElement"
        android:label="@string/title_activity_speaker_element"
        android:parentActivityName=".speakers" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="dyson.cornell.edu.womeninleadership.speakers" />
    </activity>

这是我的SpeakerElement类:

package dyson.cornell.edu.womeninleadership;

import android.media.Image;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.TextView;

public class SpeakerElement extends ActionBarActivity {
    TextView name;
    TextView position;
    TextView bio;
    ImageView speakerImage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_speaker_element);
        getActionBar().setDisplayHomeAsUpEnabled(true);
        String data = getIntent().getExtras().getString("speaker");

        // Saving each UI element to a local variable
        name = (TextView)findViewById(R.id.speakerElementName);
        position = (TextView)findViewById(R.id.speakerElementPosition);
        bio = (TextView)findViewById(R.id.speakerElementBio);
        speakerImage = (ImageView)findViewById(R.id.speakerElementPicture);

        if (data.equals("SuzyWelch")) {
            name.setText("Suzy Welch");
            position.setText("Author and Public Speaker, Suzy Welch Communications");
            bio.setText("This is a test");
            speakerImage.setImageResource(R.drawable.dash);
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.speaker_element, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

1 个答案:

答案 0 :(得分:0)

在异常堆栈的底部是一个java.lang.OutOfMemoryError,当你在一个ImageView中解码你的一个图像时抛出它。通常,您应该预计您的应用程序不会超过16MB的RAM。 Android的标准Bitmap每像素使用4个字节。这意味着单个400万像素图像将使用所有可用的RAM。检查您的图像,并缩小任何太大的图像。

另一种选择,如果您的图像不需要高色彩保真度,则使用不同的Bitmap.Config,每个像素只需要2个字节。可能有一种方法通过xml指定Config,但我不知道它。我会在onCreate中加载Bitmap(使用较低保真度的Bitmap.Config值),然后在ImageView上调用setImageBitmap。