Курсор, который не был деактивирован или закрыт - PullRequest
0 голосов
/ 04 июля 2011

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

I/dalvikvm( 5232):  at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:631)

I/dalvikvm( 5232):  at dalvik.system.NativeStart.run(Native Method)

I/dalvikvm( 5232): Uncaught exception thrown by finalizer (will be discarded):

I/dalvikvm( 5232): Ljava/lang/IllegalStateException;: Finalizing cursor android.database.sqlite.SQLiteCursor@467ed108 on my_table_name that has not been deactivated or closed

В чем конкретно заключается моя проблема?Как я могу найти, где ошибка в моем коде?должен ли "(SQLiteCursor.java:631)" что-то значить для меня?

Спасибо

Ответы [ 4 ]

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

Нет, но этот

      android.database.sqlite.SQLiteCursor@467ed108

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

      Log.d("ActivityX", cursor1);
0 голосов
/ 14 августа 2011

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

if (mCursor != null && Cursor.getCount() > 0) {
    //Iterate through cursor list
    mCursor.close();
}

Что вызывает эту ошибку, потому что вам все еще нужно закрыть курсор, даже если getCount () == 0. Логика должна быть:

if (mCursor != null) {
    if(mCursor.getCount() > 0) {
         //Iterate through cursor list
    }
    mCursor.close();
}

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 04 июля 2011

Я получил эту ошибку, когда поток прерывается из-за ошибки и преждевременно закрывает активность вместе с ней.Это может быть то, что происходит.Возможно, вы захотите проверить вывод logcat над ошибкой, чтобы увидеть, не вызывает ли другая ошибка выполнение потока и завершает ли это дополнительную ошибку.

0 голосов
/ 04 июля 2011

Вы закрыли соединение с БД, но не закрыли курсор

, когда когда-либо закрывалось соединение с БД, сначала проверьте курсор как этот.

Cursor c;

if (c != null) {
    c.deactivate();
    c.close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...