我在使用MatrixCursor填充ListView时遇到问题:

private void fillData() {
    String[] menuCols = new String[] { "icon", "item", "price" };
    int[] to = new int[] { R.id.icon, R.id.item, R.id.price };

    MatrixCursor menuCursor = new MatrixCursor(menuCols);
    startManagingCursor(menuCursor);

    menuCursor.addRow(new Object[] { R.drawable.chicken_sandwich, "Chicken Sandwich", "$3.99" });

    SimpleCursorAdapter menuItems = new SimpleCursorAdapter(
            this, R.layout.menu_row, menuCursor, menuCols, to);

    setListAdapter(menuItems);
}

构造SimpleCursorAdapter会导致崩溃。即使当我尝试删除图标时,应用程序仍然崩溃。这是我的menu_row.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </ImageView>
    <TextView
        android:id="@+id/item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </TextView>
    <TextView
        android:id="@+id/price"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </TextView>
</LinearLayout>

编辑:这是崩溃时的调用堆栈:
Thread [<3> main] (Suspended (exception RuntimeException))
    ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2481
    ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2497
    ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 119
    ActivityThread$H.handleMessage(Message) line: 1848
    ActivityThread$H(Handler).dispatchMessage(Message) line: 99
    Looper.loop() line: 123
    ActivityThread.main(String[]) line: 4338
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
    Method.invoke(Object, Object...) line: 521
    ZygoteInit$MethodAndArgsCaller.run() line: 860
    ZygoteInit.main(String[]) line: 618
    NativeStart.main(String[]) line: not available [native method]

解决方案:

我发现了问题,解决方案在下面的答案中。

最佳答案

让我们用一个不熟悉使用Eclipse调试Java的方式来概括一下。

在调试器中运行该应用程序,导致RuntimeException崩溃。单击调用堆栈中最顶部的元素会给我一个变量列表,在该列表中可以看到我的异常e。

特定的错误是一个InvalidArgument,因为我的MatrixCursor没有_id列。添加标记为_id的列可解决此问题,现在一切正常。

感谢您让我再次查看调试器!熟悉并了解您的工具!

08-18 17:16