4

私のAndroidアクティビティでは、データベースから物事を読み取る必要があります。データベースアクセスを処理するヘルパークラスを作成しました。このヘルパークラスには、さまざまなものを読み取り、大騒ぎせずにそれらを返すように設計されたいくつかの異なるメソッドがあります。これが一例です。

public String GetName(int id)
{
    String toReturn = null;
    Cursor cursor = null;

    try
    {
        cursor = db.query(TABLE_NAME,
            new String[] {"name"},
            "id = " + id,
            null,
            null,
            null,
            null,
            null);

        assert(cursor.getCount() == 1);

        cursor.moveToFirst();

        toReturn = new String(cursor.getString(0)); 
    }
    finally
    {
        if(cursor != null)
            cursor.close();
    }

    return toReturn;
}

エラーが発生し続ける

10-10 15:52:18.991:W / SQLiteCompiledSql(28313):ファイナライザーのステートメントを解放します。カーソルでclose()を明示的に呼び出すようにしてください:SELECT name FROM my_table WHERE id = 0 10-10 15:52:18.991:W / SQLiteCompiledSql(28313):android.database.sqlite.DatabaseObjectNotClosedException:アプリケーションが閉じませんでしたここで開かれたカーソルまたはデータベースオブジェクト

アクティビティは正常に機能しますが、この関数(およびそれに非常に類似した関数)に直接つながるスタックトレースを使用します。私は何が間違っているのですか?私はしばらくここを見回しました、そしてそれは私が常にカーソルを閉じることを確実にするためにtry / finalを追加したときです、しかし私はまだエラーを受け取ります。どうすればこれを修正できますか?

4

1 に答える 1

2

カーソルを正しく閉じていますが、データベースも閉じる必要があります。データベースも閉じていることを確認してください。

if(db.isOpen()) db.close();
于 2012-11-03T08:17:10.947 に答える