use*_*291 47 database android cursor
我正在使用自定义适配器扩展游标适配器在listview中显示数据,以显示我已将id传递给数据库类中的方法的特定电话号码但它正在显示
errorandroid.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
Run Code Online (Sandbox Code Playgroud)
将调试器放在方法中时,它不会在行之后
num = cursor.getString(cursor.getColumnIndex("ContactNumber"));
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我解决它.这是代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
Shu*_*ayu 105
无论何时处理游标,总是检查null并检查是否正确moveToFirst().
if( cursor != null && cursor.moveToFirst() ){
num = cursor.getString(cursor.getColumnIndex("ContactNumber"));
cursor.close();
}
Run Code Online (Sandbox Code Playgroud)
适当地放置日志以查看它是返回null还是空光标.根据那个检查你的查询.
更新将两个检查放在Jon在下面的注释中提到的单个语句中.
更新2将close()调用置于有效的游标范围内.
nge*_*esh 18
尝试这个..这将避免在光标为空时抛出异常..
if(cursor != null && cursor.moveToFirst()){
num = cursor.getString(cursor.getColumnIndex("ContactNumber"));
cursor.close();
}
Run Code Online (Sandbox Code Playgroud)
Kha*_*han 11
首先在获取数据之前检查此条件
if(cursor!=null && cursor.getCount()>0){
cursor.moveToFirst();
num = cursor.getString(cursor.getColumnIndex("ContactNumber"));
}
Run Code Online (Sandbox Code Playgroud)
查询Cursors 的保存模式是
// 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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60061 次 |
| 最近记录: |