2013-12-23 3 views
0

Так что да, я видел вопросы об этом повсюду, и поэтому имею соответственно добавил _id псевдоним на мой запрос, как показано ниже:Позорный «нет такого столбца _id» для SimpleCursorAdapter

 SimpleCursorAdapter sca = new SimpleCursorAdapter(getActivity(), 
      R.layout.activity_contact_list, cursor, new String[] { 
        "rowid _id", DBOps.COL_CATNAME }, 
      new int[] { R.id.contact_list }, CursorAdapter.NO_SELECTION); 

I создаю мой курсор так:

public Cursor getAllCategories() { 
    return mDB.query(TABLE_NAME, new String[] { "rowid _id", COL_ID, 
      COL_CATNAME, 
      COL_ICONPATH }, null, null, null, null, null); 
} 

mDB в вышеуказанном представляет собой базу данных SQLite. Я попытался изменить строку на rowid as _id, что также не работает. Также, видимо, нет необходимости менять мою структуру таблицы, добавив еще один столбец _id, как отметили некоторые другие, итак, где я здесь ошибся?

Update - вот трассировки стека -

Caused by: java.lang.IllegalArgumentException: column 'rowid _id' does not exist 
at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303) 
at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:333) 
at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:107) 
at com.rex.bizcontacts.ContactListFragment.onCreate(ContactListFragment.java:77) 
+1

, пожалуйста, поделитесь исключением. – Shahar

+0

Да, я добавил его сейчас. – Rex

+0

во-первых, 'rowid _id' не является допустимым именем ... возможно 'rowid_id'. и COL_ID = ?? – Shahar

ответ

3

Нет, вы не получаете проблему.

Комментарий, по которому вы жалуетесь, имеет правильную идею. rowid _id не является допустимым именем. Вы можете сказать это, посмотрев на исключение.

Вы можете попробовать "rowid AS _id" вместо "rowid _id". Я бы порекомендовал rawQuery(), а не query(), так что это можно сделать более естественно ("SELECT rowid AS _id, ...").

+0

Я сделал и то и другое, и каждый раз он продолжает жаловаться на ту же ошибку. – Rex

+0

Позвольте мне попробовать с rawQuery. Однако проблема связана с вызовом SimpleCursorAdapter, который не принимает строку запроса. – Rex

+0

@Rex: 'AS' - соответствующий синтаксис, и я знаю, что он работает с' rawQuery() ': https://github.com/commonsguy/cw-omnibus/tree/master/Database/Constants https: // github.com/commonsguy/cw-omnibus/tree/master/Database/ConstantsROWID – CommonsWare

Смежные вопросы