我有一个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);
}
答案 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时你想要的唯一性。