2011-07-05 39 views

回答

7

我不認爲有直接獲取這些信息的方法。但是,您可以執行的操作是創建您自己的子類Cursor,該子類在靜態列表中跟蹤當前打開的Cursor

例如(僞代碼,未測試):

public class TrackingCursor extends SQLiteCursor { 

    private static List<Cursor> openCursors = new LinkedList<Cursor>(); 

    public TrackingCursor(SQLiteDatabase db, SQLiteCursorDriver driver, 
          String editTable, SQLiteQuery query) { 
     super(db, driver, editTable, query); 
     openCursors.add(this); 
    } 

    public void close() { 
     openCursors.remove(this); 
    } 

    public static List<Cursor> getOpenCursors() { 
     return openCursors; 
    } 

} 

您需要提供自己的工廠到數據庫,讓你的TrackingCursor旨意創造的,而不是簡單的SQLiteCursor秒。

public class TrackingCursorFactory implements SQLiteDatabase.CursorFactory { 

    Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, 
        String editTable, SQLiteQuery query) { 
     return new TrackingCursor(db, masterQuery, editTable, query); 
    } 
} 

最後告訴DB通過將工廠作爲參數,當你調用openDatabase使用此工廠。