У меня есть таблица, названная "ведущим устройством" со столбцами id
, name
, surname
, gender
, и designation
Когда я исчерпываю запрос для получения объекта Курсора для CursorAdapter, я добираюсь:
IllegalArgumentException: column '_id' does not exist when call to CursorAdaptor
Но у меня нет columen названным "_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)
Это происходит потому, что CursorAdapter
должен иметь столбец _id
в таблице, которую он использует.
При использовании базы данных (SQLite) в приложениях Android лучше добавить столбец с именем _id "во все таблицы, чтобы иметь возможность использовать CursorAdapter
.
В качестве альтернативы вы можете написать sql, например
select member_id as _id from member _table where ....."
, чтобы получить Cursor
, который можно использовать с CursorAdapter
.
Это указано в CursorAdaptor
документация :
Адаптер, который предоставляет данные из курсора в виджет ListView. Курсор должен включать столбец с именем «_id», иначе этот класс не будет работать ».
В вашей namemaster
таблице должен быть определен столбец _ID
для использования SimpleCursorAdaptor. Убедитесь, что схема вашей таблицы включает _ID
, а не id
, поскольку последнее неверно.
Я полагаю, что SimpleCursorAdapter предполагает наличие колонки '_id'. Вам нужно создать его, поэтому, вероятно, вам будет проще использовать "_id" вместо вашего собственного "id". Прочитайте 2-е сообщение на этой странице