0

我有: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...

预防它的最佳方法是什么?如何关闭从其他类返回的光标?谢谢

4

2 回答 2

1

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

您可以在完成后关闭数据库,或者您可以在应用程序的整个生命周期内保持打开状态,方法是使用您打开一次的单个全局数据库连接,在所有活动中共享,并且永不关闭。

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

于 2012-06-09T16:51:15.977 回答
0

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

于 2012-06-09T16:35:50.537 回答