在使用CursorAdapter()显示android联系人的时候,Eclipse没有代码部分的错误提示,但程序会莫名其妙在运行时出错,而我们又找不到症结所在,报错如下:显示:java.lang.IllegalArgumentException
Cursor cursor = context.getContentResolver().query(
Phone.CONTENT_URI,
new String[] {Phone.CONTACT_ID,Phone.DISPLAY_NAME,
Phone.NUMBER, Phone.PHOTO_ID}, null,null,null);
这是因为,在query方法中少了一个查询条件,Phone._ID,添加了这个就OK了,因为CursorAdapter的用法规定如下,
上 面显示:The Cursor must include a column named "_id" or this class will not work.也就是说,我们查询结果集游标Cursor返回的数据中,一定要有一列名为“_id”,否则这个类将不起作用,这也就是为什么Eclipse会 报上面的错误。
在使用SimpleCursorAdapter()显示SQLite数据库表中的数据的时候,Eclipse没有代码部分的错误提示,但程序会莫名其妙在运行时出错,而我们又找不到症结所在,报错如下:
显示:java.lang.IllegalArgumentException
而假如我们的数据表列名中并未定义名为“_id”的列名,如:我的数据表中定义了三列,列名分别为:“_id1”,”name1”,”bir”,这样,我的表根本和“_id”的列没有关系,那么上面的报错由何而来?
(ps:如果你的数据表中刚好就把某一列定义成了_id,那么肯定是不会出现这种错误了)
查找原因:
仔细查看Android的开发文档中有关SimpleCursorAdapter()的说明发现,SimpleCursorAdapter()的父类是CursorAdapter(),CursorAdapter()有一个很隐蔽的规定:
上 面显示:The Cursor must include a column named "_id" or this class will not work.也就是说,我们查询结果集游标Cursor返回的数据中,一定要有一列名为“_id”,否则这个类将不起作用,这也就是为什么Eclipse会 报上面的错误。
(ps:chi数据表三列名为:_id1,name1,bir)
原代码:
view plaincopy to clipboardprint?
1.
2.
3.
4.
5.
修改后代码:
view plaincopy to clipboardprint?
1.
2.
3.
4.
5.
在查询语句里改了以后,还要在相应的输出设置里面改,