Приложение закрывается с этой ошибкой - запрашивает имя столбца с именем таблицы - PullRequest
0 голосов
/ 29 января 2012

Я пытаюсь использовать ListAdapter для отображения результатов курсора.Согласно моим журналам, все возвращается правильные результаты, пока не достигнет этой точки

    ListAdapter adapter = new SimpleCursorAdapter(this,R.layout.cattle_layout,
            c,new String[]{"c.animal_id, c.eartag"},new int[]{R.id.TextView_cattleId,R.id.TextView_earTag});

В этот момент программа выдает исключение с вышеупомянутым сообщением и затем называет два поля, которые я хочу отобразить- с этого момента это следующее исключение java.lang.Exception, а затем ссылки на AbstractCursor.getColumnIndexOrThrow

Должна быть проблема с «созданием новой строки []», но я искал и могуничего не найти.

Буду признателен за предложения.

Создание курсора

        String asColumnsToReturn[] ={
    "tbl_cattle._id",
    "tbl_cattle.animal_id",
    "tbl_cattle.eartag"};

    Cursor c = mDatabase.query(TABLE_CATTLE, asColumnsToReturn,"type_of_animal=?", new String[]{targetType},null, null, null, null);
    Log.i(DEBUG_TAG, "Record Count " + c.getCount() + " Columns: " + c.getColumnCount());

Мой журнал дает мне правильное количество для предложения where, правильные данныев записях

Ответы [ 3 ]

2 голосов
/ 29 января 2012
new String[]{"c.animal_id, c.eartag"}

до

new String[]{"c.animal_id", "c.eartag"}

(Вы имели их как одну строку.)

Кроме того, было бы легче читать, отлаживать и поддерживать ваш код, если бы вы не пытались собрать все в одну строку. «Я сделал это в меньшем количестве строк, что вы» - это не то, что кого-то действительно волнует, но «я не могу вспомнить, что это должно делать, и я не могу понять это, прочитав это» - это действительно большая проблема.

0 голосов
/ 02 февраля 2014

Я сталкиваюсь с подобной проблемой, и я думаю, что Курсор может некорректно извлекать имена столбцов с точкой в ​​имени, которое я получил с помощью вызова rawQuery(). Например. c.animalId не будет работать, но я держу пари, что если вы измените проекцию на c_animalId, это будет. Кажется, это работает для меня.

Прежде чем я обнаружу ошибку в коде, я перебираю все столбцы в Курсоре и записываю оператор, если столбец равен проекции, что он и делает. Отладка и установка точки останова до ошибки Я вижу все столбцы в точности так, как я ожидаю их в Курсоре. Я знаю, что Android неправильно цитирует имена столбцов в других точках кода (что смешно), и я думаю, что эта проблема связана с аналогичной проблемой.

0 голосов
/ 29 января 2012

попробуй

new String[] { "COLUMNNAME_ANIMAL_ID", "COLUMNNAME_EARTAG" }

где эти две строки как раз и звучат. также вы должны действительно использовать статические строки для имен столбцов. в вашей базе данных определите их один раз как:

public final static String COLUMNNAME_ANIMAL_ID = animalId; // where animalId is how the SQL column will be named.

и звоните туда, куда вам нужно, с помощью DatabaseClass.COLUMNNAME_ANIMAL_ID

в этом примере вы должны использовать:

new String[] { DatabaseClass.COLUMNNAME_ANIMAL_ID, DatabaseClass.COLUMNNAME_EARTAG }

таким образом, вы а) можете быть уверены, что в вашем SQL нет орфографических ошибок и б) можете изменять имена столбцов / таблиц / БД с быстротой 1,2,3 - независимо от того, где вы их использовали.

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