Вопрос

Я получаю эту ошибку

Нелегаларгментация: столбец '_id' не существует

При использовании SimpleCursorAdapter Чтобы получить из моей базы данных, и таблица действительно имеет это _id столбец. Заметив это общую проблему, я пытался обойти ее, учитывая некоторые решения онлайн, но ни один из них не работает. Это мой курсор запрос:

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.quoterow, myCursor, new String[]{"_id", "quote"}, new int[]{R.id.quote});

Хотя я должен упомянуть, что оригинал не включал _id В столбце я добавил это недавно, чтобы попытаться решить проблему. У кого -нибудь есть идеи, которые могут помочь решить проблему?

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

Решение

Ваша база данных не должна иметь столбец под названием «_ID», но простак -экипаж должен быть возвращен. Вы можете сделать это со псевдонимом.

Примером является то, что у меня есть таблица с столбцами ...

uid,name,number

Чтобы запрашивать это для простых, я делаю это с базой данных rawQuery...

SELECT uid as _id,name,number FROM MY_TABLE

Это работает нормально и поставляет необходимый столбец «_id» для простых.

РЕДАКТИРОВАТЬ: Насколько я понимаю, поле _ID используется в качестве уникального ключа, чтобы убедиться, что данные, с которыми обрабатывает курсор, можно правильно обрабатывать адаптерами, адаптервью и т. Д.

Посмотрите на модель данных в документах для Поставщики контента.

Использование уникального ключа в «базах данных» любого рода - это в значительной степени универсальная практика, и, насколько я могу судить, использование имени столбца «_id '(или' _id ') - это просто способ стандартизации и упрощения вещей через базы данных, поставщики контента, курсоры, адаптеры и т. Д.

Короче говоря, для того, чтобы эти различные компоненты работали правильно, им нужен столбец данных с уникальными значениями, но они также должны «знать», каково название этого столбца. Они не знают, так сказать, так, что имя моего столбца «UID» - это то, что им нужно, в отличие от моего «имя» и «номер».

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

У вас либо нет столбца «_id» в вашей таблице, либо вы не включаете его в свой запрос. Это то, что вызывает исключение. Вам также нужно исправить следующее:

В вашем последнем аргументе для конструктора CursorAdapter отсутствует ссылка на столбец для _id.

Аргумент int [] представляет собой массив идентификаторов зрения для заполнения значениями из курсора. Аргумент String [] - это массив имен столбцов из строки, на которую указывает курсор.

Вы должны иметь равное количество значений в массиве, как вы делаете массив. Потому что данные из курсора захватываются из курсора и помещают в вид. Если в каждом массиве нет равных значений, адаптер бросает исключение, потому что у него нет правильного количества информации для сопоставления данных в представлениях.

Кроме того, согласно Javadoc для SimplecursorAdapter, этот конструктор устарел, потому что он вызывает выполнение запросов в потоке пользовательского интерфейса. Что плохо. Вместо этого используйте этот:

http://developer.android.com/reference/android/widget/simplecursoradapter.html#simplecursoradapter%28Android.content.Context ,%20Int,%20Android.Database.cursor ,%20Java.Lang.String []. ],%20int%29

Простое исправление было бы добавить «0» в конце списка аргументов.

Если вы пытаетесь использовать существующую базу данных SQLite в вашем приложении Android, вам необходимо выполнить некоторую подготовительную работу, чтобы заставить ее работать должным образом. В этом блоге подробно описывается процесс.

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

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