21

I'm having an issue using a MatrixCursor to populate my 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); } 

Constructing the SimpleCursorAdapter causes a crash. Even when I tried removing the icon the app still crashed. Here is my 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> 

Edit: Here is the call stack at the time of the crash:

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] 

SOLUTION:

I found the problem and the solution is in my answer below.

2
  • 3
    When you get a crash, you can look at the stack trace to help figure out where things are going wrong -- use adb logcat, DDMS, or the DDMS perspective in Eclipse. If that does not give you enough help to fix the problem, post the stack trace as an edit to your question, as it may give us some clues. Commented Dec 10, 2009 at 17:55
  • Excellent question ... I wish I found this two weeks ago! Thanks for the sample code. Good job!! Commented Sep 16, 2010 at 16:08

1 Answer 1

20

Let's chalk this one up to inexperience with debugging Java using Eclipse.

Running the application in the debugger, I crashed with a RuntimeException. Clicking the very top element in the call stack gave me the list of Variables, at which I saw my Exception e.

The specific error was an InvalidArgument because my MatrixCursor did not have an _id column. Adding a column labeled _id fixed the problem and now everything works.

Thanks for making me look at the debugger again! Be comfortable with and knowledgeable about your tools!

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.