2011-07-31 4 views
0

私はSQLite(Androidのデータベース)を必要とするアプリケーションを持っています。Android:非アクティブ化またはクローズされていないカーソルの確定

モデルとデータヘルパーにJPAのような構造を作成しました。 問題は、helper.search(int id)上で別のaHelper.search(int id)を呼び出したときに、カーソルの終了エラーが記録されるということです。

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

私のJPAのようなモデルとデータヘルパーの構造は、このようになります。

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()を使用したCursor。Cursor。 –

答えて

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

それは不思議です。しかし、私が別のヘルパーのインスタンスを閉じようとしたとき。それは事を変えなかった。これをどうすれば解決できますか? –

関連する問題