0

こんにちは、SQL データベースを使用して Android アプリを作成しようとしています。結果をリストビューにリストしたいのですが、うまくいかないようです。これまでのところ、エラーが発生しています。

java.lang.IllegalArgumentException: 列 '_id' が存在しません

SimpleCursorAdapter adp;

    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         db.open();


         // from array: keeps the names of the Cursor columns.
         String[] from = {"CURSOR_FIELD1","CURSOR_FIELD2"};
         // to array: keeps the ids of the fields in your list item layout
         int[] to = {R.id.itemLayoutfield1, R.id.itemLayoutfield2};
         // sets the basic layout of the ListActivity (the layout must contain a ListView element with the id called 'list').
         setContentView(R.layout.view_data_layout);

         // gets de cursor with the rows        
         c = db.getAllCourses(); 

         adp = new SimpleCursorAdapter(this, R.layout.row, c, from, to);             
         setListAdapter(adp);

        ListView listView = getListView();
        listView.setTextFilterEnabled(true);


        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // When clicked, show a toast with the TextView text
                Toast.makeText(getApplicationContext(),
                ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 

                displayAllCourses(c);

                db.close();


            }               

        });

そして私が持っている私のdbadapter

public Cursor getAllCourses() {

    return db.query(DATABASE_TABLE, new String[] { ID, Time_Amount,
            Seed_Acre, MM_Settings, Acre_amount, Speed_Type, Acre_String, Seed_Type,  Hill_Name }, null, null,
            null, null, null, null);
}

public Cursor getCourse(long rowId) throws SQLException {

    Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] { ID,
            Time_Amount, Seed_Acre, MM_Settings, Acre_amount, Speed_Type, Acre_String, Seed_Type, Hill_Name },
            ID + "=" + rowId, null, null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;


}
4

1 に答える 1

1

あなたの ' hill ' 文字列配列には、1 つの項目 (テーブルの最初の行でさえありません) が含まれています。

Cursor からのクエリの結果を表示するには、ArrayAdapter の代わりに SimpleCursorAdapter オブジェクトを使用することをお勧めします。このオブジェクトは、クエリの結果 (カーソル) をビュー (ユーザー インターフェイス) のフィールドにマップするのに役立ちます。それは次のようなものです:

public class YourListActivity extends ListActiviy{

    private SimpleCursorAdapter adp;
    private Cursor c;

    public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);

             ...
             // from array: keeps the names of the Cursor columns.
             String[] from = {"CURSOR_FIELD1","CURSOR_FIELD2", ...};
             // to array: keeps the ids of the fields in your list item layout
             int[] to = {R.id.itemLayoutfield1, R.id.itemLayoutfield2, ...};
             // sets the basic layout of the ListActivity (the layout must contain a ListView element with the id called 'list').
             setContentView(R.layout.listLayout);

             // gets de cursor with the rows        
             c = db.getAllCourses(); 

             adp = new SimpleCursorAdapter(this, R.layout.itemLayout, c, from, to);             
             setListAdapter(adp);

             ...
     }
}

重要な注意: CursorAdapter クラスとそのサブクラス (つまり、SimpleCursorAdapter) では、テーブルの主キーに _id という名前を付ける必要があることに注意してください。

listLayout.xml は次のようになります (id ' list ' の ListView があることに注意してください)。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content">
     <ListView android:id="@android:id/list"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"/>
 </LinearLayout>

itemlayout.xml は次のようになります。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
            <TextView
                android:id="@+id/itemLayoutfield1"
                android:text="TextView" />
        </LinearLayout>
        <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent" >
            <TextView
                android:id="@+id/itemLayoutfield2"
                android:text="TextView" />          
        </LinearLayout>
        <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent" >
            <TextView
                android:id="@+id/itemLayoutfield3"
                android:text="TextView" />          
        </LinearLayout>
</LinearLayout>
于 2013-01-08T16:12:30.670 に答える