заставить близких в создании простого адаптера курсора - PullRequest
1 голос
/ 01 мая 2011

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

Этомой код:

public class Server8 extends Activity {

DBAdapter db;

    @Override
    public void onCreate (Bundle savedInstanceState) {

       setContentView(R.layout.main);

       db=new DBAdapter(this);
       db.openDataBase();
       Cursor cursor=db.getAllData2();

       startManagingCursor(cursor);

       String[] from=new String[] {db.KEY_ROUTE};     

       int[] to = new int[] { R.id.name_entry};

       ContactListCursorAdapter items = new ContactListCursorAdapter(this, R.layout.list_example_entry, cursor, from, to);
    }

    public class ContactListCursorAdapter extends SimpleCursorAdapter{

        private Context context;

        private int layout;

        public ContactListCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to) {
            super(context, layout, c, from, to);
            this.context = context;
            this.layout = layout;
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {

            Cursor c = getCursor();

            final LayoutInflater inflater = LayoutInflater.from(context);

            View v = inflater.inflate(layout, parent, false);

            int nameCol = c.getColumnIndex(db.KEY_ROUTE);
            String name = c.getString(nameCol);

            TextView name_text = (TextView) v.findViewById(R.id.name_entry);
            if (name_text != null) {
                name_text.setText(name);
            }

            return v;
        }

        @Override
        public void bindView(View v, Context context, Cursor c) {

            int nameCol = c.getColumnIndex(db.KEY_ROUTE);
            String name = c.getString(nameCol);

            TextView name_text = (TextView) v.findViewById(R.id.name_entry);

            if (name_text != null) {
                name_text.setText(name);
            }
        }

В моем DBAdapter у меня есть это:

public static final String TABLE_2= "route";

public static final String KEY_ROWID_2="_id";

public static final String KEY_ROUTE= "route";

public static final String KEY_USER_ID= "user_id";

Вот как я запрашиваю курсор:

public Cursor getAllData2() 
{
    return db.query(TABLE_2, new String[] {KEY_ROUTE},null,null,null,null,null);
}

и вот что дает мне мой logcat:

04-30 09: 26: 24.323: ОШИБКА / AndroidRuntime (2676): вызвано: java.lang.IllegalArgumentException: столбец '_id' не существует

04-30 09: 26: 24.323: ОШИБКА / AndroidRuntime (2676): в android.database.AbstractCursor.getColumnIndexOrThrow (AbstractCursor.java:314)

04-30 09:26:24.323: ОШИБКА / AndroidRuntime (2676): на android.widget.CursorAdapter.init (CursorAdapter.java:111)

04-30 09: 26: 24.323: ОШИБКА / AndroidRuntime (2676): на android.widget.CursorAdapter. (CursorAdapter.java:90)

04-30 09: 26: 24.323: ОШИБКА / AndroidRuntime (2676): в android.widget.ResourceCursorAdapter. (ResourceCursorAdapter.java:47)

04-30 09: 26: 24.323: ОШИБКА / AndroidRuntime (2676): на android.widget.SimpleCursorAdapter. (SimpleCursorAdapter.java:88)

04-30 09: 26: 24.323: ОШИБКА / AndroidRuntime (2676): на com.server.Server8 $ ContactListCursorAdapter. (Server8.java:103)

04-30 09: 26: 24.323: ОШИБКА / AndroidRuntime (2676): at com.server.Server8.onCreate (Server8.java:91)


Причина: java.lang.IllegalArgumentException: столбец '_id' не существует

I 'я даже не спрашиваю о чем-то подобном !!

и вот как выглядит мой TABLE_2:

_id         route                  user_id

1           Sebes-Alba               1             ....only one record

Что я делаю не так?Спасибо

Ответы [ 2 ]

2 голосов
/ 01 мая 2011

Убедитесь, что в вашей таблице есть столбец с именем _id. Общий подход заключается в создании столбца _id как _id INTEGER PRIMARY KEY AUTOINCREMENT.
Затем убедитесь, что вы всегда запрашиваете _id с каждым запросом к базе данных.

Ссылки:

Сведения о проблемах с идентификатором столбца

Как создать столбец

0 голосов
/ 01 мая 2011

В вашем журнале указано, что в цели вашего запроса (таблица) нет столбца _id:

столбец '_id' не существует

Выследует проверить, есть ли в вашей таблице route столбец с именем _id, и, если есть разница, следует обновить public static final String KEY_ROWID_2.

...