android.database.CursorIndexOutOfBoundsException:索引0请求,大小为0
我正在使用自定义适配器扩展游标适配器在列表视图中显示数据,以显示特定的电话号码我已经通过ID到数据库类中的方法,但它显示
errorandroid.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
而将debugging器放在方法中不会在行之后
num = cursor.getString(cursor.getColumnIndex("ContactNumber"));
任何人都可以帮我解决这个问题吗? 这是代码:
public String getNumberFromId(int id) { String num; db= this.getReadableDatabase(); Cursor cursor = db.query(scheduletable, new String[] { "ContactNumber" },"_id="+id, null, null, null, null); cursor.moveToFirst(); num = cursor.getString(cursor.getColumnIndex("ContactNumber")); cursor.close(); db.close(); return num; }
每当你处理游标时,总是检查null并检查moveToFirst()
而不失败。
if( cursor != null && cursor.moveToFirst() ){ num = cursor.getString(cursor.getColumnIndex("ContactNumber")); cursor.close(); }
正确放置日志以查看它是否返回null
或空游标。 根据那个检查你的查询。
更新在下面的评论中,把两个支票放在Jon所提到的一个陈述中。
更新2将close()
调用放在有效的游标范围内。
试试这个..这将避免当游标为空时引发exception。
if(cursor != null && cursor.moveToFirst()){ num = cursor.getString(cursor.getColumnIndex("ContactNumber")); cursor.close(); }
在获取数据之前首先检查这个条件
if(cursor!=null && cursor.getCount()>0){ cursor.moveToFirst(); num = cursor.getString(cursor.getColumnIndex("ContactNumber")); }
在尝试从光标读取任何内容之前,请检查moveToFirst()
的返回值。 看起来好像没有结果被返回。
查询Cursor
的保存模式是
// just one Cursor cursor = db.query(...); if (cursor != null) { if (cursor.moveToFirst()) { value = cursor.getSomething(); } cursor.close(); } // multiple columns Cursor cursor = db.query(...); if (cursor != null) { while (cursor.moveToNext()) { values.add(cursor.getSomething()); } cursor.close(); }
如果人们还在寻找:
而不是search"ContactNumber"
尝试searchPhone.NUMBER
。 本教程包含更多细节的代码: http : //developer.android.com/training/basics/intents/result.html