Android 3.0 Не удалось прочитать строку №, столбец № из окна курсора - PullRequest
6 голосов
/ 21 июля 2011

У меня есть приложение, которое отлично работает на Android 2.1, но при попытке перехода на 3.0 я получаю ошибку курсора, с которой я не знаком.

Java.lang.IllegalStateException: Не удалось прочитать строку 0, столбец -1 из окна курсора.Убедитесь, что курсор инициализирован правильно перед доступом к данным из него.

Все данные хранятся в базе данных SQLite, и этот код прекрасно работает в Android 2.1.Нужно ли по-другому инициализировать курсор в Android 3.0?

Ниже приведен мой код.

private void OpenGroupData(){
SQLiteDatabase db = openOrCreateDatabase(DATABASE_NAME,Context.MODE_PRIVATE,null);
Cursor cur = db.rawQuery("SELECT groupid FROM properties GROUP BY GroupID" + ";" , null);
LinearLayout glayout = (LinearLayout) findViewById(R.id.Grouplayout);
LinearLayout gwindow = (LinearLayout) findViewById(R.id.groupwindow);

TextView data = new TextView(this);
glayout.addView(data);
data.setText("");
int ID = cur.getColumnIndex("groupid");
int idvalue;

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);

try{
    // Check if our result was valid.
    cur.moveToFirst();
    if (cur != null) {

        // Loop through all Results
        do {data = new TextView(this);
            data.setTextSize(20);
        data.setClickable(true);
        data.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
              GroupClick(v);
            }
          });
        glayout.addView(data);
        idvalue = cur.getInt(ID);
        data.setId(idvalue);
        data.setText("Group: " + idvalue);
        }while(cur.moveToNext());
        } 
        cur.close();
        db.close();
        }   catch(Exception e) {
            Toast.makeText(getApplicationContext(), "Open Group Exception: " + e.toString(), Toast.LENGTH_SHORT).show();
        }
 }

Ответы [ 5 ]

2 голосов
/ 10 августа 2011

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

//Trew error
c.getColumnIndex("ArticleNumber");

//Was correct
c.getColumnIndex("Articlenumber");
1 голос
/ 22 марта 2012

-1 - это столбец _id, который должен иметь каждая таблица sqlite, как того требует платформа Android. Если вам нужно добавить +1 к индексу, вы где-то ошибаетесь.

1 голос
/ 08 февраля 2012

Если getColumnIndex возвращает -1, то столбец не существует. В противном случае возвращает нулевой индекс столбца.

1 голос
/ 22 июля 2011

Хорошо, я понял это.По какой-то причине при попытке перехода моего приложения к 3.0, когда мой курсор идет и получает индекс столбца для поля, в этом случае («groupid») он возвращает значение -1.Когда Курсор пытается начать с -1, он падает, потому что не может найти запись в строке (0), столбце (-1).Поэтому я решил добавить один к индексу столбца при получении идентификатора.см. ниже.

 int ID = cur.getColumnIndex("groupid") + 1;
 int idvalue;

Добавление 1 в индекс столбца, похоже, решило проблему.

0 голосов
/ 11 февраля 2013

Значение -1 возвращает форму getColumnIndex (columnName), если «columnName» не может быть найдено.Проверьте имена столбцов

...