Android:如何关闭从Class返回Activity的游标

时间:2012-06-09 16:22:36

标签: java android database sqlite cursor

我有:Accounts.java

public class Accounts{

    private SQLiteDatabase dbConfig;

public Cursor list(Context context, String db, String where, String order) {

    DBHelper dbHelper = new DBHelper(context, db);
    dbConfig = dbHelper.getReadableDatabase();

    Cursor c = dbConfig.query("accounts", new String[]{ "iId","sName"}, where, null, null, null, order);
    return c;   
    }
}

和:MainActivity.java

Accounts account = new Accounts();
Cursor cursor =  account.list(getApplicationContext(), globalDB, null, null);
while (cursor.moveToNext()) { 
     int id = cursor.getInt(0);
     String name = cursor.getString(1);
}
cursor.close();

运行我的应用程序我得到一些logcat消息,如:

close() was never explicitly called on database...

防止它的最佳方法是什么?如何关闭从其他类返回的Cursor? 感谢

2 个答案:

答案 0 :(得分:1)

退出account.list()后,底层数据库连接仍处于打开状态,但没有剩余的引用。它已经泄露了。

您可以在完成数据库后关闭数据库,也可以通过一次打开一个全局数据库连接,在所有活动中共享,从不关闭数据库,在应用程序的生命周期内保持打开状态。

我推荐后一种方法。它会产生更简单的代码。

答案 1 :(得分:0)

而不是调用cursor.close();,您可以调用并创建一个关闭游标和数据库的Accounts.close()方法