Android SimpleCursorAdapter没有这样的列ID

时间:2011-11-11 06:29:12

标签: android simplecursoradapter illegalargumentexception

我有一个Listview,我想用我的SQLite数据库填充信息,这似乎是最实用的解决方案。 在我的调试器中,它说它是由:

引起的
  

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 个答案:

答案 0 :(得分:5)

您在 getSpinnerData()中执行的查询的列列表中未包含 _id

FYI,

您必须延长需要 _id 列的CursorAdapter

_id 仅在CursorAdapter中用于确定哪个列是id。您可以在CursorAdapter中覆盖此行为,或在查询中将别名添加到id。

答案 1 :(得分:1)

SimpleCursorAdapter始终需要_id字段。

您的数据库包含没有id列的表或带有其他列名的id。所以卸载应用。并将CREATE语句编辑为:

  "CREATE TABLE IF NOT EXISTS contact_data( _id INTEGER PRIMARY KEY AUTOINCREMENT,  something ,............ )

答案 2 :(得分:0)

这意味着数据库表中不存在列名“name”或“data”。 你可以发布表模式吗?这些列名称是否可用?

答案 3 :(得分:0)

实际上按照上面的建议声明_id将起作用“_id INTEGER PRIMARY KEY AUTOINCREMENT”,但是如果你不需要_id在表的生命周期内是唯一的,你可以省略AUTOINCREMENT关键字,作为“PRIMARY KEY” “也会自动增量,但在逻辑上等同于(max(_id)+1),这保证了使用CursorAdapter时你想要的唯一性。