21

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]  

解決:

私は問題を見つけました。解決策は以下の回答にあります。

4

1 に答える 1

20

これは、Eclipse を使用した Java のデバッグの経験が浅いためと考えておきましょう。

デバッガーでアプリケーションを実行すると、RuntimeException でクラッシュしました。コール スタックの一番上の要素をクリックすると、変数のリストが表示され、そこに例外 e が表示されました。

MatrixCursor に _id 列がなかったため、特定のエラーは InvalidArgument でした。_id というラベルの付いた列を追加すると、問題が修正され、すべてが機能するようになりました。

デバッガをもう一度見させてくれてありがとう!ツールに精通し、快適に使用してください。

于 2009-12-10T18:15:59.800 に答える