2012-06-09 47 views
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... 

防止它的最佳方法是什么?我如何关闭从其他课程返回的游标? 感谢

+0

你需要关闭db.if没有完成,那么确保你在活动被破坏时关闭它 –

+1

@Vipul不,你不需要关闭db。请参阅http://stackoverflow.com/a/7999153/385478 –

回答

0

,而不是调用cursor.close();你可以调用,并创建一个Accounts.close()方法将关闭这两个光标和数据库

1

account.list()后退出,底层的数据库连接仍然是开放的,但也有它没有剩余的引用。所以它泄漏了。

您可以在完成数据库后关闭数据库,也可以通过一次性打开单个全局数据库连接,在您的所有活动中共享并且永不关闭。

我推荐后一种方法。它导致更简单的代码。