Pregunta

Tengo una función para leer los datos de DB.Phut, este sigue Siempre devuelve el error ... no tengo mucho conocimiento en Android ... Sooking para obtener ayuda

10-03 11:33:05.870: E/AndroidRuntime(1321): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.projects.myworldsafe/com.projects.myworldsafe.DeailedView}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

.

String getItemDetailsWp(String id){
System.out.print(id);
SQLiteDatabase db = this.getReadableDatabase();
String[] params=new String[]{id};
String selectQuery = "SELECT Content  FROM " + TABLE_ITEMS +" WHERE "+ITEM_ID+"=?";
Cursor c=db.rawQuery(selectQuery,params);   
 c.moveToFirst();
 int index= c.getCount();
 int indexd= c.getColumnIndex(ITEM_CONTENT); 
 System.out.print("Count query"+indexd);
 return c.getString(index);
}

¿Fue útil?

Solución

Usa esto:

return c.getString(indexd);

Es lo que realmente quieres obtener valor.Usted usó index allí, que devuelve el número de registro en su cursor.

También es mejor práctica:

String getItemDetailsWp(String id){
System.out.print(id);
SQLiteDatabase db = this.getReadableDatabase();
String[] params=new String[]{id};
String selectQuery = "SELECT Content  FROM " + TABLE_ITEMS +" WHERE "+ITEM_ID+"=?";
Cursor c=db.rawQuery(selectQuery,params);   
if(c.getCount()>0){
    c.moveToFirst();
    int index= c.getCount();
    int indexd= c.getColumnIndex(ITEM_CONTENT); 
    System.out.print("Count query"+index);// use index instead of indexd to print total records in query
    return c.getString(index);// return value of column number specified in indexd
}
else
    return "";// when no records found
}

Otros consejos

Aquí está el código correcto

int index= c.getCount(); // this will return total rows found
int indexd= c.getColumnIndex(ITEM_CONTENT);  // this is the column index by giving the column name.
System.out.print("Count query"+indexd);
return c.getString(indexd); // here you need to pass the column index but you passing the index which was total number of rows

Cursor c=db.rawQuery(selectQuery,params);   

está devolviendo el cursor con el tamaño 0, cambie su código para verificar si el cursor tiene elementos o no, luego muévase a la primera posición por:

Cursor c=db.rawQuery(selectQuery,params);   
if(c.getCount()>0)
{
 c.moveToFirst();
int index= c.getCount();
 int indexd= c.getColumnIndex(ITEM_CONTENT); 
 System.out.print("Count query"+indexd);
 return c.getString(index);
}
return "";

Suena como si estuvieras tratando de leer desde un resultado vacío.

Revise su base de datos, la consulta está devolviendo un cursor de tamaño 0, por lo que está intentando acceder al cursor en el índice 0, de ahí el error. Repensar la consulta y verificar la base de datos para valores.

Probablemente está accediendo a un cursor de 0 filas.CAMBIAR A:

// moveToFirst itself will return false if there is no entry on Cursor
if(c.moveToFirst()){
    int cursorCount = c.getCount();
    int indexd = c.getColumnIndex(ITEM_CONTENT); 
    System.out.print("Count query"+index);
    // You should getString(ColumnIndex) not CursorCount
    return c.getString(indexd);
} else
    return "";

Está obteniendo una excepción de índice fuera de los límites, ya que está pasando el número de registros en lugar del número de columna. Como mejores prácticas de codificación, consulte el cursor para registros, es decir, está vacío o contiene registros. Usa esto

String getItemDetailsWp(String id){
System.out.print(id);
SQLiteDatabase db = this.getReadableDatabase();
String[] params=new String[]{id};
String selectQuery = "SELECT Content  FROM " + TABLE_ITEMS +" WHERE "+ITEM_ID+"=?";
Cursor c=db.rawQuery(selectQuery,params);   
if(c.getCount()>0){
c.moveToFirst();
int index= c.getCount();
int indexd= c.getColumnIndex(ITEM_CONTENT); 
System.out.print("Count query"+index);
return c.getString(indexd);
}
else
return "";// when no records found
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top