本文介绍了简单的游标适配器问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
下面是我的code一个简单的游标适配器。
公共类CursorList扩展ListActivity {
/ **当第一次创建活动调用。 * /
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main); DatabaseAdapter DA =新DatabaseAdapter(这一点,mydb.sqlite); da.open();
CUR = da.fetchAllRecords光标(医生,新的String [] {名字});
startManagingCursor(现); cur.moveToFirst();
做{
Log.v(信息,cur.getString(cur.getColumnIndex(名字)));
}而(cur.moveToNext()); cur.moveToFirst(); 的String [] =由新的String [] {姓};
INT []为= INT新[] {} R.id.row; SimpleCursorAdapter SCA =新SimpleCursorAdapter(这一点,R.layout.row_item,CUR,从,到); setListAdapter(SCA);
}
}
的数据记录在日志中正确显示,但code停止工作时,它到达
SimpleCursorAdapter SCA =新SimpleCursorAdapter(这一点,R.layout.row_item,CUR,从,到);
行。
我得到的错误是:
ERROR / AndroidRuntime(26746):未捕获的处理程序:螺纹主力退出,由于未捕获的异常
ERROR / AndroidRuntime(26746):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.arnab.cursorlist / com.arnab.cursorlist.CursorList}:
java.lang.IllegalArgumentException异常:列'_id'不存在
我在哪里去了?
为什么它给了列'_id'不存在错误?它是我们必须在我们的表的必要列?
编辑:
当我把光标相关code在try catch块,像这样:
{尝试
SimpleCursorAdapter SCA =新SimpleCursorAdapter(这一点,R.layout.row_item,CUR,从,到); setListAdapter(SCA);
}
赶上(例外五){
Log.v(错误,E.getMessage());
}
我得到的消息:
VERBOSE /错误(1026):列'_id'不存在
@Rasel:这里是 fetchAllRecords
法
公共光标fetchAllRecords(字符串表,字符串列[]){
返回mDb.query(表,列,NULL,NULL,NULL,NULL,NULL);
}
解决方案
Yes, if you want to use your database information in a cursor adapter. The adapter uses it for internal purposes. Your table must have an '_id' column, and you must select it in your query (so it is in the Cursor
result set). You do not have to actually display it in your ListView
.
Revised for Posterity
Instead of actually adding the '_id' column, you can SELECT
your own 'id' column as '_id', and it will work just the same.
这篇关于简单的游标适配器问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!