为什么我的Cursor未在Android Activity中关闭?

在我的
Android Activity中,我需要从数据库中读取内容.我创建了一个帮助类来处理我的数据库访问.这个帮助器类有几种不同的方法,用于读取不同的东西并返回它们而不用大惊小怪.这是一个例子.

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): Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: SELECT name FROM my_table WHERE id = 0
10-10 15:52:18.991: W/SQLiteCompiledSql(28313): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here

虽然活动工作正常,但是有一个直接通向此函数的堆栈跟踪(以及非常类似于它的堆栈跟踪).我究竟做错了什么?我在这里看了一会儿,那是我添加try / finally以确保我总是关闭Cursor,但我仍然得到错误.我怎样才能解决这个问题?

最佳答案 您正在正确关闭游标,但您还需要关闭数据库,确保您还关闭数据库:

if(db.isOpen()) db.close();
点赞