Android.database.CursorIndexOutOfBoundsException: Índice 0 solicitado, con un tamaño de 0

Estoy usando el adaptador de encargo que extiende el adaptador del cursor para exhibir datos en listview, para exhibir el número de teléfono particular que he pasado el id a un método en clase de la base de datos pero está mostrando

errorandroid.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 

Mientras que coloca el depurador en el el método no va después de la línea

 num = cursor.getString(cursor.getColumnIndex("ContactNumber")); 

¿Puede alguien 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; } 

6 Solutions collect form web for “Android.database.CursorIndexOutOfBoundsException: Índice 0 solicitado, con un tamaño de 0”

Siempre que usted está tratando con los cursores, compruebe SIEMPRE para null y comprobar para moveToFirst() sin falta.

 if( cursor != null && cursor.moveToFirst() ){ num = cursor.getString(cursor.getColumnIndex("ContactNumber")); cursor.close(); } 

Coloque los registros de forma adecuada para ver si está devolviendo null o un cursor vacío. De acuerdo con ese cheque su consulta.

Actualizar Coloque ambas verificaciones en una sola sentencia como mencionó Jon en el comentario a continuación.

Actualizar 2 Coloque la llamada close() dentro del ámbito de cursor válido.

Intenta esto .. esto evitará que se lance una Excepción cuando el cursor está vacío ..

 if(cursor != null && cursor.moveToFirst()){ num = cursor.getString(cursor.getColumnIndex("ContactNumber")); cursor.close(); } 

Primero verifique esta condición antes de obtener los datos

 if(cursor!=null && cursor.getCount()>0){ cursor.moveToFirst(); num = cursor.getString(cursor.getColumnIndex("ContactNumber")); } 

Compruebe el valor moveToFirst() de moveToFirst() , antes de intentar leer cualquier cosa desde el cursor. Parece que no se devuelve ningún resultado.

Un esquema de guardar para consultar Cursor 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(); } 

En caso de que la gente siga 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

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.