2009-12-10 46 views
21

我有一个问题,使用MatrixCursor来填充我的ListView在ListView中使用带有文本和图像的MatrixCursor和SimpleCursorAdapter

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] 

解决方案:

我发现问题和解决方案在我的答案下面。

+3

当您发生崩溃时,您可以查看堆栈跟踪以帮助找出问题所在 - 在Eclipse中使用adb logcat,DDMS或DDMS透视图。如果这不能为解决问题提供足够的帮助,请将堆栈跟踪作为对问题的编辑,因为它可能会给我们一些线索。 – CommonsWare 2009-12-10 17:55:57

+0

优秀的问题...我希望我两周前找到了!感谢您的示例代码。做得好!! – mobibob 2010-09-16 16:08:11

回答

20

让我们一起来谈谈使用Eclipse调试Java的经验。

在调试器中运行应用程序,我崩溃了一个RuntimeException。点击调用堆栈中最顶层的元素给了我变量列表,在这个列表中我看到了异常e。

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

感谢您让我再次看看调试器!对您的工具感到满意并对其有所了解!

相关问题