2011-07-31 2 views
0

У меня есть приложение, которое требует использования SQLite (базы Android).Android: Завершение работы курсора, который не был деактивирован или закрыт

Я создал структуру, подобную JPA, для моей модели и datahelper. Проблема заключается в том, что я вызываю еще один aHelper.search (int id), а на helper.search (int id), завершение журнала ошибок курсора.

return Child(cursor.getInt(0), new ParentHelper.search(cursor.getInt(1))); 

Структура моей модели, подобной JPA, и datahelper выглядит следующим образом.

class Parent { 
    int id; 
    String name 
    // constructor with field-parameter 
    // getters and setters 
} 

class Child { 
    int id; 
    Parent parent; 
    // constructor with field-parameter 
    // getters and setters 
} 

class ParentHelper { 
    // necessary SQLiteImpelemntations 
    Parent search(int id) { 
     // new Cursor implementation 
     cursor.moveToFirst(); 
     return new Parent(cursor.getInt(0), cursor.getString(1)); 
    } 
} 

class ChildHelper { 

    ParentHelper parentHelper; 

    void close() { 
     parenHelper.close() 
     SQLiteDatabase.close(); 
     SQLiteOpenHelper.close(); 
    } 

    ArrayList searchAll() { 
     // new Cursor implementation 
     cursor.moveToFirst(); 
     Child child = new Child(cursor.getInt(0), parentHelper.search(cursor.getInt(1))) 
     ArrayList.add(child) 
     cursor.close(); 
    } 

    // necessary SQLiteImpelemntations 
    Child search(int id) { 
     // new Cursor implemenation 
     cursor.moveToFirst(); 
     Child child = new Child(cursor.getInt(0), parentHelper.search(cursor.getInt(1))) 
     cursor.close(); 
     return child; 
    } 
} 
+0

Обновлен до кода. Застревает при запуске нескольких курсоров (как в JPA) иерархически. Child.search(). Курсор с Parent.search(). Курсор. –

ответ

0

Попробуйте закрыть курсор перед возвратом значения.

class ParentHelper { 
// necessary SQLiteImpelemntations 
Parent search(int id) { 
    // new Cursor implementation 
    cursor.moveToFirst(); 
    Parent p = new Parent(cursor.getInt(0), cursor.getString(1)); 
    cursor.close(); 
    return p; 
    } 
} 

Сделайте то же самое для своего ChildHelper.

+0

Ошибка изменилась на «close() никогда не вызывалась явным образом в базе данных». –

+0

Я не знаю, где вы получите эту ошибку, но в какой-то момент вы должны попытаться закрыть вашу переменную SQLiteDatabase (SQLiteDatabase db; db.close();) –

+0

Странно казалось. Но когда я попытался закрыть экземпляр другого помощника. Это ничего не изменило. Как я могу это решить? –

Смежные вопросы