【发布时间】:2011-10-03 08:32:55
【问题描述】:
这是我的简单光标适配器的代码。
public class CursorList extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DatabaseAdapter da = new DatabaseAdapter(this, "mydb.sqlite");
da.open();
Cursor cur = da.fetchAllRecords("Doctors", new String[]{"FirstName"});
startManagingCursor(cur);
cur.moveToFirst();
do {
Log.v("Info", cur.getString(cur.getColumnIndex("FirstName")));
} while(cur.moveToNext());
cur.moveToFirst();
String[] from = new String[]{"FirstName"};
int[] to = new int[]{R.id.row};
SimpleCursorAdapter sca = new SimpleCursorAdapter(this, R.layout.row_item, cur, from, to);
setListAdapter(sca);
}
}
数据记录在日志中显示正确,但代码到达时停止工作
SimpleCursorAdapter sca = new SimpleCursorAdapter(this, R.layout.row_item, cur, from, to);
行。
我得到的错误是:
ERROR/AndroidRuntime(26746): Uncaught handler: thread main exiting due to uncaught exception
ERROR/AndroidRuntime(26746): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.arnab.cursorlist/com.arnab.cursorlist.CursorList}:
java.lang.IllegalArgumentException: column '_id' does not exist
我哪里出错了?
为什么会出现“_id”列不存在的错误?它是我们必须在表格中包含的必要列吗?
编辑:
当我将光标相关代码放在 try catch 块中时,如下所示:
try {
SimpleCursorAdapter sca = new SimpleCursorAdapter(this, R.layout.row_item, cur, from, to);
setListAdapter(sca);
}
catch(Exception E) {
Log.v("Error", E.getMessage());
}
我收到消息:
VERBOSE/Error(1026): column '_id' does not exist
@Rasel : 这是fetchAllRecords 方法
public Cursor fetchAllRecords(String table, String columns[]) {
return mDb.query(table, columns, null, null, null, null, null);
}
【问题讨论】:
-
是的!
_id是您应该在表格中使用的列,而不是通常的ids,例如employee_id、student_id或product_id。您只需将这些 id 替换为_id,因为 Android Sqlite 数据库是通过_id管理的。
标签: android listview android-widget simplecursoradapter