Android SimpleCursorAdapter Нет такого идентификатора столбца

У меня есть список, который я хочу заполнить информацией из моей базы данных 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);

XML-файл R.layout.list:

<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);
}

person pop pop pop    schedule 11.11.2011    source источник
comment
ваша база данных создается???   -  person Awais Tariq    schedule 11.11.2011
comment
Ага. Экспортировал в клиент sql, и он показывает :)   -  person pop pop pop    schedule 11.11.2011


Ответы (4)


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

К вашему сведению,

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

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

person Paresh Mayani    schedule 11.11.2011
comment
@Hiral, спасибо, к вашему сведению, я тоже столкнулся с той же проблемой, так что я это знаю. - person Paresh Mayani; 11.11.2011
comment
@poppoppop просто предложение, согласно часто задаваемым вопросам StackOverflow, вы должны принять ответ, когда сочтете его полезным. В любом случае ура :) - person Paresh Mayani; 14.11.2011

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

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

  "CREATE TABLE IF NOT EXISTS contact_data( _id INTEGER PRIMARY KEY AUTOINCREMENT,  something ,............ )
person Shailendra Singh Rajawat    schedule 11.11.2011

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

person Rajdeep Dua    schedule 11.11.2011

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

person guyland123    schedule 24.04.2012