Android SimpleCursorAdapter Нет идентификатора столбца - PullRequest
3 голосов
/ 11 ноября 2011

У меня есть Listview, который я хочу заполнить информацией из своей базы данных SQLite, и это казалось наиболее практичным решением.В моем отладчике написано, что это вызвано:

IllegalArgumentException Нет такого столбца.Идентификатор не существует

Это Java-файл, который я пытаюсь заполнить:

    data        = new MyData(this);
    ListView lv = (ListView) findViewById(R.id.list);

    ListAdapter adapter = new SimpleCursorAdapter(
                                this,
                                R.layout.list, 
                                data.selectData(), 
                                new String[] {
                                    "name",
                                    "title"
                                },
                                new int[] {
                                    R.id.name,
                                    R.id.title
                                }
    );
    lv.setAdapter(adapter);

R.layout.list xml file:

<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
                    android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
    <TextView android:id="@+id/name"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:paddingTop="8dip"/>
    <TextView android:id="@+id/title"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"/>

</LinearLayout>

public Cursor selectData() {

    return db.query("tbl_mydata", new String[] {"name", "abb" }, null, null, null, null, null);
}

Ответы [ 4 ]

5 голосов
/ 11 ноября 2011

Вы не включаете _id в свой список столбцов для запроса, который вы делаете в getSpinnerData () .

FYI,

Вы должны расширять CursorAdapter , который требует столбец _id.

_id используется только в CursorAdapter, чтобы определить, какой столбец является идентификатором,Вы можете переопределить это поведение в CursorAdapter или добавить псевдоним в запросе к идентификатору.

1 голос
/ 11 ноября 2011

SimpleCursorAdapter всегда нужно поле _id.

Ваша база данных содержит таблицу без столбца идентификатора или идентификатора с другим именем столбца.так что удалите приложение.и отредактируйте оператор CREATE как:

  "CREATE TABLE IF NOT EXISTS contact_data( _id INTEGER PRIMARY KEY AUTOINCREMENT,  something ,............ )
0 голосов
/ 24 апреля 2012

Фактическое объявление _id, как предложено выше, будет работать «_id INTEGER PRIMARY KEY AUTOINCREMENT», но если вам не нужно, чтобы _id был уникальным в течение всей жизни таблицы, вы можете опустить ключевое слово AUTOINCREMENT, как «PRIMARY KEY "также автоматически автоинкрементно, но логически эквивалентно (max (_id) +1), что гарантирует уникальность, которая действительно то, что вы хотите при использовании CursorAdapter.

0 голосов
/ 11 ноября 2011

Это означает, что имя столбца «имя» или «данные» не существует в вашей таблице базы данных. Можете ли вы опубликовать схему таблицы? Доступны ли эти имена столбцов?

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