我有: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? 感谢
答案 0 :(得分:1)
退出account.list()
后,底层数据库连接仍处于打开状态,但没有剩余的引用。它已经泄露了。
您可以在完成数据库后关闭数据库,也可以通过一次打开一个全局数据库连接,在所有活动中共享,从不关闭数据库,在应用程序的生命周期内保持打开状态。
我推荐后一种方法。它会产生更简单的代码。
答案 1 :(得分:0)
而不是调用cursor.close();
,您可以调用并创建一个关闭游标和数据库的Accounts.close()
方法