Подтвердить что ты не робот

Курсор финализирован без предварительного закрытия() Android

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

Это происходит, когда я перехожу от строки 20 к 21. occur

Я попытался помещать cursor.deactivate() и cursor.close() в regel 50. Но без результата. Кто-нибудь знает, почему я получаю эту ошибку и как ее решить? Спасибо:)

4b9b3361

Ответ 1

Вы должны закрыть курсор перед базой данных. Поместите свой код в блок try/catch и в блок finally, закройте курсор и закройте базу данных:

try {
    db = ...
} catch(Exception ex) { 
    // Log the exception message or whatever you like
} finally {
    try {
      if( cursor != null && !cursor.isClosed())
        cursor.close();
       if( db.isOpen() )
        db.close();
    } catch(Exception ex) {}
}

Заключительная последовательность имеет большое значение при выполнении IO с БД или Поставщиками контента. Для получения дополнительной информации см. эту ссылку

Ответ 2

чтобы найти такие проблемы, просто включите StrictMode для версии Debug:

public void onCreate() {
     if (DEVELOPER_MODE) {
         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                 .detectDiskReads()
                 .detectDiskWrites()
                 .detectNetwork()   // or .detectAll() for all detectable problems
                 .penaltyLog()
                 .build());
         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                 .detectLeakedSqlLiteObjects()
                 .detectLeakedClosableObjects()
                 .penaltyLog()
                 .penaltyDeath()
                 .build());
     }
     super.onCreate();
 }

Дополнительная информация @ http://developer.android.com/reference/android/os/StrictMode.html

всего наилучшего,

Ответ 3

Всегда, не забудьте закрыть курсор, вызывая cursor.close() перед закрытием базы данных. Это должно решить вашу проблему.

Ответ 4

пусть действие управляет курсором lifecycly, используя startManagingCursor(c), и все будет хорошо.