如何为预先存在的表实现OpenableColumns?

时间:2014-08-01 14:02:46

标签: android sqlite android-contentprovider

我有一个SQLite表,其中包含对我应用程序内部文件的引用。该表维护文件的内部文件名,文件的mime类型(作为文件扩展名,例如" wav"),以及人性化的标题(例如"最初的想法")。 ContentProvider中的openFile()查询此表以查找内部文件名,然后向请求它的任何人提供该文件的流。

我想实现OpenableColumns.DISPLAY_NAME,以便在请求时,ContentProvider可以根据标题+点+扩展名返回有意义的文件名。因此,上面的示例将导致显示名称为" initial ideas.wav"。

由于没有与OpenableColumns.DISPLAY_NAME直接对应的列,如何设置ContentProvider的query()方法以返回每条记录的适当计算的DISPLAY_NAME值,以及可能要求的任何其他常规列?

对于openFile()的其他调用,我通过构造一行OpenableColumns.DISPLAY_NAME来实现MatrixCursor;但是,我不知道这是如何工作的,因为我需要为查询返回多行,表中已经存在混合列,并且动态创建了伪列。

因此,我希望能够查询{FilesTable.INTERNAL_FILE_NAME, OpenableColumns.DISPLAY_NAME},并从ContentProvider获得有意义的结果。

1 个答案:

答案 0 :(得分:1)

您可以使用这样的SQL查询来创建伪列:

SELECT _id,
       InternalFileName,
       FileType,
       Title,
       Title || '.' || FileType AS DisplayName
FROM MyLittleTable