2011-07-05 18 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使用此工厂。