3

SQLite データベースからの情報を入力したい Listview があり、これが最も実用的なソリューションのように思えました。私のデバッガーでは、次のことが原因であると表示されています。

IllegalArgumentException そのような列はありません。ID が存在しません

これは、入力しようとしているJavaファイルです。

    data        = new MyData(this);
    ListView lv = (ListView) findViewById(R.id.list);

    ListAdapter adapter = new SimpleCursorAdapter(
                                this,
                                R.layout.list, 
                                data.selectData(), 
                                new String[] {
                                    "name",
                                    "title"
                                },
                                new int[] {
                                    R.id.name,
                                    R.id.title
                                }
    );
    lv.setAdapter(adapter);

R.layout.list xml ファイル:

<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
                    android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
    <TextView android:id="@+id/name"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:paddingTop="8dip"/>
    <TextView android:id="@+id/title"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"/>

</LinearLayout>

public Cursor selectData() {

    return db.query("tbl_mydata", new String[] {"name", "abb" }, null, null, null, null, null);
}
4

4 に答える 4

5

getSpinnerData()_idで実行するクエリの列リストに含めていません。

ご参考までに、

列を要求するCursorAdapterを拡張する必要があり_idます。

_idどの列がidであるかを判別するためにCursorAdapterでのみ使用されます。CursorAdapterでこの動作をオーバーライドするか、クエリのエイリアスをidに追加できます。

于 2011-11-11T06:36:55.180 に答える
1

SimpleCursorAdapter常に_idフィールドが必要です。

データベースに、ID列のないテーブルまたは他の列名のIDが含まれています。したがって、アプリをアンインストールします。CREATEステートメントを次のように編集します。

  "CREATE TABLE IF NOT EXISTS contact_data( _id INTEGER PRIMARY KEY AUTOINCREMENT,  something ,............ )
于 2011-11-11T06:43:37.173 に答える
0

これは、列名「name」または「data」のいずれかがデータベーステーブルに存在しないことを意味します。テーブルスキーマを公開できますか?これらの列名は利用できますか?

于 2011-11-11T06:37:22.413 に答える
0

上記のように _id を実際に宣言すると、「_id INTEGER PRIMARY KEY AUTOINCREMENT」が機能しますが、_id がテーブルの存続期間にわたって一意である必要がない場合は、AUTOINCREMENT キーワードを省略できます。「PRIMARY KEY」も自動インクリメントですが、論理的には (max(_id)+1) と同等であり、CursorAdapter を使用するときに本当に必要な一意性を保証します。

于 2012-04-24T14:08:20.167 に答える