简体   繁体   中英

Android: How to close a cursor that returns from Class to Activity

I have: 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;   
    }
}

and: 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();

Running my application I get some logcat messages like:

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

What is the best way to prevent it? How can I close a Cursor that returns from other class? Thanks

After account.list() exits, the underlying database connection is still open, but there are no remaining references to it. So, it has leaked.

You can close the database once you're finished with it, or you can keep it open for the lifetime of your application by having a single global database connection which you open once, share amongst all your activities, and never close.

I recommend the latter approach. It results in much simpler code.

instead of calling cursor.close(); you can call and create a Accounts.close() method that closes both cursor and database

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM