我使用定制适配器在列表视图显示数据延伸光标适配器,显示特定电话号i已通过id来在数据库类中的方法,但它显示
errorandroid.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
同时将调试器在所述方法时不行之后去
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;
}
当你正在处理光标,经常检查空和检查moveToFirst()
没有失败。
if( cursor != null && cursor.moveToFirst() ){
num = cursor.getString(cursor.getColumnIndex("ContactNumber"));
cursor.close();
}
地方适当的日志,看看它是否返回null
或空指针。 根据该检查查询。
更新在单个语句把两个支票由Jon在下面的评论中提到。
更新2将close()
的有效光标范围内调用。
试试这个..这将避免抛出异常,当光标是空的..
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
s是
// 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();
}
如果人们仍然在寻找:
而不是搜索的"ContactNumber"
尝试搜索Phone.NUMBER
。 本教程使用了更多的细节代码: http://developer.android.com/training/basics/intents/result.html
尝试卸载应用程序,然后再次测试...其实sqlite的分贝仅创建一次,当应用程序在第一次安装...所以,如果你认为你的逻辑是目前然后重新安装应用程序就可以了你。 !!!!
文章来源: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0