IllegalArgumentException: столбец '_id' не существует при вызове SimpleCursorAdaptor - PullRequest
9 голосов
/ 13 июля 2010

У меня есть таблица с именем «master» со столбцами id, name, surname, gender и designation

Когда я запускаю запрос, чтобы получить объект Cursor для CursorAdapter , я получаю:

IllegalArgumentException: column '_id' does not exist when call to CursorAdaptor 

Но у меня нет столбца с именем "_id".

Кто-нибудь может сказать мне, почему я получаю эту ошибку?

Вот трассировка стека:

07-13 15:45:40.582: WARN/System.err(295): java.lang.IllegalArgumentException: column '_id' does not exist
07-13 15:45:40.592: WARN/System.err(295):     at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
07-13 15:45:40.592: WARN/System.err(295):     at android.widget.CursorAdapter.changeCursor(CursorAdapter.java:257)
07-13 15:45:40.602: WARN/System.err(295):     at com.praumtech.names4baby.ui.NamesListAdapter.setCursor(NamesListAdapter.java:63)
07-13 15:45:40.602: WARN/System.err(295):     at com.praumtech.names4baby.ui.BoysNamesListActivity.initNameList(BoysNamesListActivity.java:79)
07-13 15:45:40.602: WARN/System.err(295):     at com.praumtech.names4baby.ui.BoysNamesListActivity.onCreate(BoysNamesListActivity.java:49)
07-13 15:45:40.602: WARN/System.err(295):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
07-13 15:45:40.602: WARN/System.err(295):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
07-13 15:45:40.612: WARN/System.err(295):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
07-13 15:45:40.612: WARN/System.err(295):     at android.app.ActivityThread.access$2100(ActivityThread.java:116)
07-13 15:45:40.612: WARN/System.err(295):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
07-13 15:45:40.612: WARN/System.err(295):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-13 15:45:40.621: WARN/System.err(295):     at android.os.Looper.loop(Looper.java:123)
07-13 15:45:40.621: WARN/System.err(295):     at android.app.ActivityThread.main(ActivityThread.java:4203)
07-13 15:45:40.621: WARN/System.err(295):     at java.lang.reflect.Method.invokeNative(Native Method)
07-13 15:45:40.621: WARN/System.err(295):     at java.lang.reflect.Method.invoke(Method.java:521)
07-13 15:45:40.621: WARN/System.err(295):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
07-13 15:45:40.621: WARN/System.err(295):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
07-13 15:45:40.631: WARN/System.err(295):     at dalvik.system.NativeStart.main(Native Method)

Ответы [ 4 ]

16 голосов
/ 15 июля 2010

Это происходит потому, что CursorAdapter должен иметь столбец _id в используемой таблице.

При использовании базы данных (SQLite) в приложениях Android лучше добавить столбец с именем _id "во все таблицы, чтобы можно было использовать CursorAdapter.

В качестве альтернативы, вы можете написать SQL-оператор, такой как

select member_id as _id from member _table where ....." 

, чтобы получить Cursor, который можно использовать с CursorAdapter.

Это указано в CursorAdaptor документации :

Адаптер, который предоставляет данные из курсора в виджет ListView. Курсор должен включать столбец с именем _id, иначе этот класс не будет работать. "

1 голос
/ 30 июня 2011

Простые и соленые

Чтобы решить эту проблему, необходимо переименовать имя поля первичного ключа как _id.

1 голос
/ 13 июля 2010

В ваших namemaster таблицах должен быть столбец _ID, определенный для использования SimpleCursorAdaptor.Убедитесь, что ваша схема таблицы содержит _ID, а не id, так как последнее неверно.

0 голосов
/ 13 июля 2010

Я полагаю, что SimpleCursorAdapter предполагает наличие столбца _id. Вам нужно создать его, чтобы вам было легче использовать «_id» вместо своего «id». Прочитайте 2-й пост на этой странице

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...