Может ли простая регистрация курсора изменить поведение всей программы? - PullRequest
0 голосов
/ 02 марта 2012

Рассмотрим этот метод в классе DatabaseHelper:

public Cursor getRules()
{
    SQLiteDatabase db=this.getReadableDatabase();
    Cursor cur=db.rawQuery("SELECT * from Rules",new String [] {}); 
    Log.d("Cursor Size", "" + cur.getCount());
    db.close();
    return cur;
}

Возвращает Курсор, и на активности я его потребляю как

    Cursor ruleCursor=DatabaseHelper.getInstance(this).getRules();
    if(ruleCursor!=null)
    {
        RuleManager.getInstance(this,null).loadRules(ruleCursor);
        ruleCursor.close();
    }

(я не перемещаю всю обработку курсора внутри класса DatabaseHelper и возвращаю просто список объектов вместо курсора), проблема в том, что если я не запишу Log.d в getRules (), произойдет сбой всей программы. я получаю сообщение об ошибке «Неверный оператор в fillWindow ()», и SQLite не возвращает ни одной строки в операторе «Выбор».

Просто добавление Log.d для cursor.getCount () решает все. Кроме того, надо упомянуть, что до вчерашнего дня эта штука работала нормально и так себя ведет с прошлого вечера.

Я что-то упустил? Ожидается ли такое поведение?

1 Ответ

1 голос
/ 02 марта 2012

Попробуйте использовать это

// Перестаньте беспокоиться о DatabaseHelper здесь.

public Cursor getAllRows() {
    Cursor c=getReadableDatabase().rawQuery("select * from RULES", null);
    return c;
}

// и где бы вы ни использовали Курсор (или «Потребляете» курсор) просто.

c=db.getAllRows();
startManagingCursor(c);

Надеюсь, это поможет вам !!

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