我对是使用MergeCursor还是使用CursorJoiner感到困惑。
我有一个带有大量数据的游标(A)。假设光标(A)和3列中有100行。我想要做的是在游标中插入(追加)一个新的列,这样得到的游标(B)有100行,但有4列。
此时,我希望第4列包含100行的默认值。
我该怎么做?
发布于 2019-07-11 22:31:27
您可以在这里使用装饰图案。
为此,安卓有CursorWrapper,这是一个.
将所有调用委托给实际的游标对象的游标包装类。这个类的主要用途是扩展游标,同时只覆盖其方法的子集。
假设您的新列名为newColumn,并且它的类型为String,那么您可以按照以下思路进行如下操作:
class MyCursorWrapper extends CursorWrapper {
private final String NEW_COLUMN = "newColumn";
@Override
public int getColumnCount() {
// Count the virtual column in
return getWrappedCursor().getColumnCount() + 1;
}
@Override
public int getColumnIndex(String columnName) {
// Return the virtual column if they are asking for it,
// otherwise just use the original
if (columnName != null && columnName.equals("newColumn") {
return getWrappedCursor().getColumnCount();
}
return mCursor.getColumnIndex(columnName);
}
public int getColumnIndexOrThrow(String columnName)
throws IllegalArgumentException {
// Same logic as getColumnIndex()
if (columnName != null && columnName.equals(NEW_COLUMN) {
return getWrappedCursor().getColumnCount();
}
return getWrappedCursor.getColumnIndexOrThrow(columnName);
}
@Override
public String getColumnName(int columnIndex) {
if (columnIndex == getWrappedCursor.getColumnCount()) {
return NEW_COLUMN;
}
return getWrappedCursor().getColumnName(columnIndex);
}
@Override
public String[] getColumnNames() {
// Add our virtual column to the result from the original Cursor
String original = getWrappedCursor().getColumnNames()
String result = new String[original.length + 1];
System.arrayCopy(original, 0, result, 0, original.length);
result[original.length] = NEW_COLUMN;
return result;
}
@Override
public String getString(int columnIndex) {
// For the last column, return whatever you need to return here
// For real columns, just delegate to the original Cursor
if (columnIndex == getWrappedCursor().getColumnCount()) {
return yourResultHere();
}
return getWrappedCursor().getString(columnIndex);
}
}https://stackoverflow.com/questions/24645276
复制相似问题