2014-01-20 1 views
-1

Мой CursorПростое исключение перехватчика курсора исключение незаконного аргумента?

Cursor c= db.query(DBHelper.EXAM_DATA,new String [] {DBHelper.EXAM,DBHelper.FILE}, null,null, null, null, null); 

Петля для курсора

c.moveToFirst(); 
    do 
    { 
     name = c.getString(0); 
     file = c.getString(1); 
     Toast.makeText(this, name + " "+file ,Toast.LENGTH_LONG).show(); 
     adapter = new SimpleCursorAdapter(this, R.layout.row_reasoning, c, new String [] {file}, new int [] {R.id.txtList}); 
     LvReasoning.setAdapter(adapter); 
    }while(c.moveToNext()); 

LogCat Показывается Эта ошибка

01-20 16:33:55.154: E/AndroidRuntime(2426): FATAL EXCEPTION: main 
01-20 16:33:55.154: E/AndroidRuntime(2426): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidhive.xmlparsing/com.androidhive.xmlparsing.ListReasoning}: java.lang.IllegalArgumentException: column '_id' does not exist 

Моя таблица имеют _ID столбец, но я не знаю, как решить эту ошибку

+0

Что такое столбец 1 в вашей таблице? – Raghunandan

+0

, но у вас есть 'name = c.getString (0);' я думаю, столбец в индексе основан так, что 0 является правильным? – Raghunandan

+0

, тогда посмотрите на конструктор адаптера и у вас есть правильные параметры для того же самого. Также нет необходимости устанавливать адаптер каждый раз в цикле – Raghunandan

ответ

1
c.moveToFirst(); 
    do 
    { 
     name = c.getString(0); 
     file = c.getString(1); 
     Toast.makeText(this, name + " "+file ,Toast.LENGTH_LONG).show(); 
     adapter = new SimpleCursorAdapter(this, R.layout.row_reasoning, c, new String [] {DBHelper.FILE}, new int [] {R.id.txtList}); 

    }while(c.moveToNext()); 
    LvReasoning.setAdapter(adapter); 

Я использовал это и это работает. Я передал имя поля базы данных DBHelper и его работу Fine. Но я действительно не знаю, почему этот код не работал ...

0

Курсор, присвоенный SimpleCursorAdapter, должен указывать n столбец с именем _id. Тот факт, что она существует в таблице не достаточно, вы должны выбрать его так включить его в список столбцов, возвращаемых:

Cursor c= db.query(DBHelper.EXAM_DATA,new String [] {"_id", DBHelper.EXAM, DBHelper.FILE}, null,null, null, null, null); 

Вы также только нужно создать экземпляр и установить адаптер один раз. Переместить эти операторы вне цикла в то время как (вы можете удалить цикл полностью, если вам не нужно, чтобы жарить содержимое каждого курсора строки):

adapter = new SimpleCursorAdapter(this, R.layout.row_reasoning, c, new String [] {file}, new int [] {R.id.txtList}); 
LvReasoning.setAdapter(adapter); 

Для каждого курсора строки, адаптер будет отображать значение столбца 'file' to R.id.txtList в R.layout.row_reasoning.

 Смежные вопросы

  • Нет связанных вопросов^_^