Java Android Studio AdapterView崩溃

Java Android Studio AdapterView崩溃,java,android-studio,Java,Android Studio,我是Java和Android Studio的新手。 我正在尝试在我的应用程序中创建一个列表。 列表中的每一行应包含一张图片和一个名称 我遵循我发现的教程,程序编译时没有错误,但是当我运行它时,它崩溃了 代码如下: MainActivity.java: import android.app.Activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widge

我是Java和Android Studio的新手。 我正在尝试在我的应用程序中创建一个列表。 列表中的每一行应包含一张图片和一个名称

我遵循我发现的教程,程序编译时没有错误,但是当我运行它时,它崩溃了

代码如下:

MainActivity.java:

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;

public class MainActivity extends Activity {

    ListView listView;
    int[] book_poster_resource = { R.mipmap.book_1,
    R.mipmap.book_2};
    String[] book_titles;
    BookAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.list_view);
        book_titles = getResources().getStringArray(R.array.book_titles);
        int i = 0;
        adapter = new BookAdapter(getApplicationContext(), R.layout.row_layout);
        listView.setAdapter(adapter);
        for(String titles: book_titles)
        {
            BookDataProvider dataProvider = new BookDataProvider(book_poster_resource[i],
                    titles);
            adapter.add(dataProvider);
            i++;
        }
    }
}
activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.amit.adapterview.MainActivity"
    android:background="#000000">

    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ListView>
</RelativeLayout>
BookAdapter.java:

package com.example.amit.adapterview;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.view.LayoutInflater;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Amit on 23/11/2015.
 */
public class BookAdapter extends ArrayAdapter {

    List list = new ArrayList();

    public BookAdapter(Context context, int resource) {
        super(context, resource);
    }

    static class DataHandler
    {
        ImageView poster;
        TextView title;
    }


    @Override
    public void add(Object object) {
        super.add(object);
        list.add(object);
    }

    @Override
    public int getCount() {
        return this.list.size();
    }

    @Override
    public Object getItem(int position) {
        return this.list.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row;
        row = convertView;
        DataHandler handler;
        if(convertView == null)
        {
            LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.row_layout, parent, false);
            handler = new DataHandler();
            handler.poster = (ImageView)
            row.findViewById(R.id.book_poster);
            handler.title = (TextView) row.findViewById(R.id.book_title);
            row.setTag(handler);
        }
        else
        {
            handler = (DataHandler) row.getTag();
        }
        BookDataProvider dataProvider;
        dataProvider = (BookDataProvider) this.getItem(position);
 handler.poster.setImageResource(dataProvider.getBook_poster_resource());
        handler.title.setText(dataProvider.getBook_title());

        return row;
    }
}
row_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:background="#000000">

        <ImageView
            android:id="@+id/book_poster"
            android:layout_width="100dp"
            android:layout_height="75dp"
            android:layout_alignParentLeft="true"
            android:src="@mipmap/book_1"/>

        <TextView
            android:id="@+id/book_title"
            android:layout_width="175dp"
            android:layout_height="75dp"
            android:layout_toRightOf="@+id/book_poster"
            android:text="Book Name"
            android:gravity="center"
            android:textColor="#FFFFFF"/>

        <!-- separate line-->
        <View
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:background="#FFFFFF"
            android:layout_below="@+id/book_poster"/>
    </RelativeLayout>
当我单击“BookAdapter.java:56”时,我重定向到以下行:

row = inflater.inflate(R.layout.row_layout, parent, false);
(在BookAdapter.java中)

谢谢你的帮助

===================

编辑:

在调试时,我注意到崩溃发生在名为“Choreographer.java”的类中的某个地方。有一个名为“doFrame”的函数:


由于某种原因,图像出现了问题。 在dsh响应之后,我尝试使用其他图像,现在它正在运行


谢谢

行=充气机。充气(R.layout.row\u布局,空,真);尝试并共享任何错误或结果。同样,当应用程序启动时,只会打开白色屏幕,并显示应用程序已停止的消息。请看我上面的编辑。您试图分配200MB来创建ImageView时内存不足。为什么要分配200MB?ImageView的源有那么大吗?两个图像都小于2MB。我不知道它为什么要分配200MB。无论如何,这应该是基础程序。我打算设置该列表,以便它从SQL server获取图像。但现在只是为了检查。。。
at com.example.amit.adapterview.BookAdapter.getView(BookAdapter.java:56)
row = inflater.inflate(R.layout.row_layout, parent, false);
void doFrame(long frameTimeNanos, int frame) {
        final long startNanos;
        synchronized (mLock) {
            if (!mFrameScheduled) {
                return; // no work to do
            }

            if (DEBUG_JANK && mDebugPrintNextFrameTimeDelta) {
                mDebugPrintNextFrameTimeDelta = false;
                Log.d(TAG, "Frame time delta: "
                        + ((frameTimeNanos - mLastFrameTimeNanos) * 0.000001f) + " ms");
            }

            long intendedFrameTimeNanos = frameTimeNanos;
            startNanos = System.nanoTime();
            final long jitterNanos = startNanos - frameTimeNanos;
            if (jitterNanos >= mFrameIntervalNanos) {
                final long skippedFrames = jitterNanos / mFrameIntervalNanos;
                if (skippedFrames >= SKIPPED_FRAME_WARNING_LIMIT) {
                    Log.i(TAG, "Skipped " + skippedFrames + " frames!  "
                            + "The application may be doing too much work on its main thread.");
                }
                final long lastFrameOffset = jitterNanos % mFrameIntervalNanos;
                if (DEBUG_JANK) {
                    Log.d(TAG, "Missed vsync by " + (jitterNanos * 0.000001f) + " ms "
                            + "which is more than the frame interval of "
                            + (mFrameIntervalNanos * 0.000001f) + " ms!  "
                            + "Skipping " + skippedFrames + " frames and setting frame "
                            + "time to " + (lastFrameOffset * 0.000001f) + " ms in the past.");
                }
                frameTimeNanos = startNanos - lastFrameOffset;
            }

            if (frameTimeNanos < mLastFrameTimeNanos) {
                if (DEBUG_JANK) {
                    Log.d(TAG, "Frame time appears to be going backwards.  May be due to a "
                            + "previously skipped frame.  Waiting for next vsync.");
                }
                scheduleVsyncLocked();
                return;
            }

            mFrameInfo.setVsync(intendedFrameTimeNanos, frameTimeNanos);
            mFrameScheduled = false;
            mLastFrameTimeNanos = frameTimeNanos;
        }

        try {
            Trace.traceBegin(Trace.TRACE_TAG_VIEW, "Choreographer#doFrame");

            mFrameInfo.markInputHandlingStart();
            doCallbacks(Choreographer.CALLBACK_INPUT, frameTimeNanos);  // AFTER THIS LINE

            mFrameInfo.markAnimationsStart();
            doCallbacks(Choreographer.CALLBACK_ANIMATION, frameTimeNanos);

            mFrameInfo.markPerformTraversalsStart();
            doCallbacks(Choreographer.CALLBACK_TRAVERSAL, frameTimeNanos);

            doCallbacks(Choreographer.CALLBACK_COMMIT, frameTimeNanos);
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIEW);
        }

        if (DEBUG_FRAMES) {
            final long endNanos = System.nanoTime();
            Log.d(TAG, "Frame " + frame + ": Finished, took "
                    + (endNanos - startNanos) * 0.000001f + " ms, latency "
                    + (startNanos - frameTimeNanos) * 0.000001f + " ms.");
        }
    }
11-24 22:31:42.905 16091-16091/com.example.amit.adapterview E/dalvikvm-heap: Out of memory on a 200815888-byte allocation.
11-24 22:31:42.935 16091-16091/com.example.amit.adapterview E/AndroidRuntime: FATAL EXCEPTION: main
11-24 22:31:42.935 16091-16091/com.example.amit.adapterview E/AndroidRuntime: android.view.InflateException: Binary XML file line #7: Error inflating class android.widget.ImageView
11-24 22:31:42.935 16091-16091/com.example.amit.adapterview E/AndroidRuntime:     at android.view.LayoutInflater.createView(LayoutInflater.java:626)
11-24 22:31:42.935 16091-16091/com.example.amit.adapterview E/AndroidRuntime:     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
11-24 22:31:42.935 16091-16091/com.example.amit.adapterview E/AndroidRuntime:     at android.view.LayoutInflater.onCreateView(LayoutInflater.java:675)
11-24 22:31:42.935 16091-16091/com.example.amit.adapterview E/AndroidRuntime:     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:700)
11-24 22:31:42.935 16091-16091/com.example.amit.adapterview E/AndroidRuntime:     at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
11-24 22:31:42.935 16091-16091/com.example.amit.adapterview E/AndroidRuntime:     at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
11-24 22:31:42.935 16091-16091/com.example.amit.adapterview E/AndroidRuntime:     at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
11-24 22:31:42.935 16091-16091/com.example.amit.adapterview E/AndroidRuntime:     at com.example.amit.adapterview.BookAdapter.getView(BookAdapter.java:55)