una - objeto cursor android
android.database.CursorIndexOutOfBoundsException: índice 0 solicitado, con un tamaño de 0 (6)
Estoy usando adaptadores personalizados que extienden el adaptador de cursor para mostrar datos en listview, para mostrar un número de teléfono particular, he pasado el id a un método en la clase de base de datos pero está mostrando
errorandroid.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
al colocar el depurador en el método no va después de la línea
num = cursor.getString(cursor.getColumnIndex("ContactNumber"));
¿Alguien puede ayudarme a resolverlo? Este es el código:
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;
}
Compruebe el valor de retorno desde moveToFirst()
, antes de intentar leer algo del cursor. Parece que no se están devolviendo resultados.
En caso de que las personas sigan buscando:
En lugar de buscar "ContactNumber"
intente buscar Phone.NUMBER
. El tutorial tiene el código con más detalles: http://developer.android.com/training/basics/intents/result.html
Primero verifique esta condición antes de obtener datos
if(cursor!=null && cursor.getCount()>0){
cursor.moveToFirst();
num = cursor.getString(cursor.getColumnIndex("ContactNumber"));
}
Siempre que moveToFirst()
con cursores, SIEMPRE verifique nulo y compruebe si moveToFirst()
falla.
if( cursor != null && cursor.moveToFirst() ){
num = cursor.getString(cursor.getColumnIndex("ContactNumber"));
cursor.close();
}
Coloque los registros apropiadamente para ver si está devolviendo null
o un cursor vacío. De acuerdo con eso, verifica tu consulta.
Actualización Coloque ambos controles en una sola declaración, como lo menciona Jon en el comentario a continuación.
Actualización 2 Ponga la llamada close()
dentro del alcance del cursor válido.
intenta esto ... esto evitará que se genere una excepción cuando el cursor esté vacío.
if(cursor != null && cursor.moveToFirst()){
num = cursor.getString(cursor.getColumnIndex("ContactNumber"));
cursor.close();
}
un esquema de salvar para consultar Cursor
s es
// 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();
}