Android 如何从Cursor中移除指定数据且无需手动逐列取值?
原生Cursor本身是只读结构,无法直接删除内部指定行,你采用的通过MatrixCursor过滤复制的方案是目前通用的可行实现。
针对多列场景下无需逐列取值的需求,可通过遍历列数批量获取整行数据,优化实现如下:
String excludeRef = "需要排除的占位内容对应标识"; // 直接复用原Cursor的列名数组,无需手动声明,适配任意列数 MatrixCursor newCursor = new MatrixCursor(cursor.getColumnNames()); int columnCount = cursor.getColumnCount(); if (cursor.moveToFirst()) { do { // 跳过要删除的占位行 if (cursor.getString(0).equals(excludeRef)) { continue; } // 批量获取当前行所有列的值 Object[] rowValues = new Object[columnCount]; for (int i = 0; i < columnCount; i++) { rowValues[i] = cursor.get(i); } newCursor.addRow(rowValues); } while (cursor.moveToNext()); } // 后续业务使用newCursor即可,使用完毕后记得关闭新旧Cursor释放资源
额外说明:
cursor.get()会自动根据字段实际类型返回对应Object实例,兼容String、int、long、Blob等所有Cursor支持的字段类型,无需手动做类型转换- 若你的场景数据量极大、对性能要求极高,可自定义
CursorWrapper子类实现行过滤逻辑,避免全量数据复制,常规业务场景上述方案足够使用。
内容的提问来源于stack exchange,提问作者pepperlove
相关产品推荐
相关产品推荐

