如何处理自定义内容提供程序中不受支持的列

时间:2014-03-19 10:10:11

标签: android

我有一个用于共享文件的自定义内容提供程序。对于列(通过查询方法),我仅支持OpenableColumns.DISPLAY_NAMEOpenableColumns.SIZE

在测试时,我注意到照片应用(Google+)有问题(NullPointerException)通过我的内容提供商打开图片,因为他们正在检索我的内容提供商不支持的_data列,并为此我返回null(对于列名称和价值观。)

后来我更新了这部分代码,现在它返回列数组_data列,但它的值为null。

现在看来这在照片应用程序中现在可以正常工作,但我很好奇...有没有人知道这是一般指定/标准化的,如果列不受支持我们应该返回什么?

部分混淆是:我们是否应该在内容提供商处理我这样做的场景,或者应该使用内容提供商的应用程序进行额外的检查?由于某些应用可以检查列是否存在,然后使用值执行某些操作(但值将为null)。另一方面,其他应用程序可以预期列,并假设列存在,那么值也应该存在。

我知道最好的方法是涵盖所有情况,但最初的问题仍然存在:是否在文档中的某处指定了此类处理?

以下是更好想象力的代码部分:

String cols[] = new String[projection.length];
Object vals[] = new Object[projection.length];

for(int i=0; i<projection.length; i++){
    //projection is passed to query() by 3rd party app
    String column = projection[i];

    if ( OpenableColumns.DISPLAY_NAME.equals(column) ) {
        cols[i] = OpenableColumns.DISPLAY_NAME;
        vals[i] = name;
    }else if ( OpenableColumns.SIZE.equals(column) ) {
        cols[i] = OpenableColumns.SIZE;
        vals[i] = file.length();
    }else{
        //THIS PART OF CODE WAS LATER ADDED
            //for unsupported column return column name
            //but it's value will be null
        cols[i] = column;
        vals[i] = null;
    }
}

MatrixCursor mc = new MatrixCursor(cols, 1);
mc.addRow(vals);

0 个答案:

没有答案