首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android:将列添加到已填充的游标

Android:将列添加到已填充的游标
EN

Stack Overflow用户
提问于 2014-07-09 04:11:20
回答 1查看 1.3K关注 0票数 5

我对是使用MergeCursor还是使用CursorJoiner感到困惑。

我有一个带有大量数据的游标(A)。假设光标(A)和3列中有100行。我想要做的是在游标中插入(追加)一个新的列,这样得到的游标(B)有100行,但有4列。

此时,我希望第4列包含100行的默认值。

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-11 22:31:27

您可以在这里使用装饰图案

为此,安卓有CursorWrapper,这是一个.

将所有调用委托给实际的游标对象的游标包装类。这个类的主要用途是扩展游标,同时只覆盖其方法的子集。

假设您的新列名为newColumn,并且它的类型为String,那么您可以按照以下思路进行如下操作:

代码语言:javascript
运行
复制
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);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24645276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档