Вопрос

У меня есть функция для чтения данных из db.but Это всегда возвращает ошибку .. Я не имею много знаний в Android .. Помощь для некоторой помощи

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

Это было полезно?

Решение

Используйте это:

return c.getString(indexd);
.

Это то, что вы действительно хотите получить ценность.Вы использовали index там, который возвращает количество записей в курсоре.

Также лучшая практика:

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
}
.

Другие советы

Вот правильный код

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);   
.

возвращает курсор с размером 0, измените код, чтобы проверить, есть ли курсор элементы или нет, то переместите в первую позицию по:

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 "";
.

Похоже, вы пытаетесь прочитать из пустых результатов.

Проверьте вашу базу данных, запрос возвращает курсор размера 0, поэтому вы пытаетесь получить доступ к курсору при индексе 0, отсюда ошибку. Переосмыслить запрос и проверьте базу данных для значений.

Вы, вероятно, получаете доступ к курсору 0 строк.Изменить:

// 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 "";
.

Вы получаете индекс из оценки исключения, поскольку вы проходите номер записей вместо номера столбца. Как лучшие практики кодирования, проверьте курсор для записей, то есть пустые или содержит записи. Используйте это

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
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top