2013-05-15 3 views
0

Обратите внимание, что я пытаюсь извлечь значения из таблицы в SQLite DB в моем приложении Android, на событие нажатия кнопки и представить его через ListView. Я могу вставлять записи в таблицу на том же event.Although он выдает следующее сообщение об ошибке:CursorIndexOutOfBoundsException при запросе SQLite в коде Android

`05-15 11:54:16.721: W/System.err(1834): android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1 
05-15 11:54:16.721: W/System.err(1834):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:434) 
05-15 11:54:16.721: W/System.err(1834):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 
05-15 11:54:16.721: W/System.err(1834):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 
` 

Follwing это кусок кода, я использую для вставки, извлечения и отображения записей из таблицы в ListView:

 save.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
       event=spinner.getSelectedItem().toString(); 
       message=ed1.getText().toString(); 
       MainActivity.myDataBase.openDatabase("/data/data/org.mithil.appname/databases/tablename", null,MainActivity.myDataBase.OPEN_READWRITE); 
       MainActivity.myDataBase.execSQL("INSERT INTO " + 
         MainActivity.tablename + 
         " Values ('"+ finalnumber +"','"+ name +"','"+ message +"','"+ event +"','"+ ldate +"');"); 
       Cursor cu = MainActivity.myDataBase.rawQuery("SELECT Name FROM " + MainActivity.tablename + " WHERE Date =" + ldate +";" , null); 
       cu.moveToFirst(); 
       Log.d("first rec", cu.toString()); 
       while(cu!=null) 
       { 
        try{ 
        lstitem.add(cu.getString(0)); 
        cu.moveToNext(); 
        } 
        catch(Exception e) 
        { 
         e.printStackTrace(); 
        } 
       } 

Все это происходит нажатием кнопки. Вставки отражаются в таблице, но «Выбрать» - нет. Я считаю, что что-то не так с перемещением курсора. Таблица состоит из пяти полей, которые я хочу получить только один. 'Name' и добавьте имя в ListView.Kindly правильно меня, где я иду не так. Спасибо много.

+0

Привет спасибо за suggestion.there нет метода hasNext() для курсора class.But есть метод, называемый "isAfterLast(), который указывает на положение после последнего row.I будет попробовать использовать that.Will пусть вы знаете. – mithil

+0

Если бы у меня был этот комментарий, я бы его снял. думал о питоне. : P – Gjordis

+0

Спасибо @ Gjordis, ваше решение помогло. Большое спасибо. Может быть, сила будет с вами. :) – mithil

ответ

1
while(cu !isAfterLast()){... 

Не следует выходить за пределы, а затем. Он может быть не нулевым и по-прежнему выходить за пределы.

2

Вы должны получить значения из курсора, как этот

if(cu.moveToFirst()) 
{ 
do 
{ 

}while(cu.moveToNext()) 
} 
+0

спасибо за предложение, сохраните это в виду. :) – mithil

0

попробовать это просто получить счетчик курсора и установить его в качестве условия в течение цикла и итерацию через него.

for(int i=0;i<cr.getCount;i++) 
{ 
//do your stuff here; 
cr.moveToNext(); 
} 
Смежные вопросы