2012-06-09 48 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()後退出,底層的數據庫連接仍然是開放的,但也有它沒有剩餘的引用。所以它泄漏了。

您可以在完成數據庫後關閉數據庫,也可以通過一次性打開單個全局數據庫連接,在您的所有活動中共享並且永不關閉。

我推薦後一種方法。它導致更簡單的代碼。