我有一个用于共享文件的自定义内容提供程序。对于列(通过查询方法),我仅支持OpenableColumns.DISPLAY_NAME
和OpenableColumns.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);