usar una tabla studio rawquery objeto mostrar from example datos data consultas como android database cursor

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.



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(); }