Android ContentResolver.query和自定义列

Android ContentResolver.query和自定义列,android,android-contentresolver,Android,Android Contentresolver,我想制作一个Android应用程序,其中包含一个音频文件列表,每个文件的ID3标签上都有额外的信息 我现在用它来获取音频文件。我想要的ID3数据不是公共的、可查询的信息的一部分,所以一旦我得到文件名,我就需要自己提取它 我的问题是如何将额外的信息添加到光标?我知道我不能更改游标结构。我是否可以提前添加更多列,然后再填充数据?我是否必须将所有数据克隆到我自己的新数据结构中 Itai.听起来您正在从内置媒体数据库读取音频文件信息。在这种情况下,无法将此信息添加到光标 但是您可以在游标读取循环中获取额

我想制作一个Android应用程序,其中包含一个音频文件列表,每个文件的ID3标签上都有额外的信息

我现在用它来获取音频文件。我想要的ID3数据不是公共的、可查询的信息的一部分,所以一旦我得到文件名,我就需要自己提取它

我的问题是如何将额外的信息添加到光标?我知道我不能更改游标结构。我是否可以提前添加更多列,然后再填充数据?我是否必须将所有数据克隆到我自己的新数据结构中


Itai.

听起来您正在从内置媒体数据库读取音频文件信息。在这种情况下,无法将此信息添加到光标

但是您可以在游标读取循环中获取额外的信息,并将其和来自游标的信息放入一个对象中,该对象将同时包含这两个信息

如果您希望将其与
光标或适配器一起使用以填充列表视图,则没有好的方法将这些信息放在一起

一些可能性:

  • 在适配器中绑定视图时,请阅读ID3标记信息-这意味着您将在UI线程中执行额外的处理,这可能会降低应用程序的速度

  • 将光标上的信息与ID3标记信息一起复制到您自己的数据库中,并在下一次从那里读取-这意味着您将拥有可能较大的重复信息


  • 是的,我担心会变成那样。。。我想我现在需要了解如何异步执行此操作。关于存储,我可能最终会使用我自己的数据库和文件名以及额外的数据,并以某种方式将其与全局安卓数据库同步。您也可以使用这两个来源的数据。您可以继续使用
    CursorAdapter
    并显示其中的数据,从后台线程中的ID3标记获取数据,并在可用时显示。您可以查看
    AsyncTask
    ,或者使用线程池(查看
    Executors
    类)。通过这种方式,您将无需缓存和同步,唯一的问题是实现后台线程。但由于我无法向当前游标添加占位符,我将不得不将数据复制到另一个列表中,不是吗?通常在游标适配器中,您将覆盖
    bindView()
    方法。在
    bindView()
    方法中,可以为列表视图中的一行创建并填充视图。但是你在这个视图中输入的信息也可以来自其他地方。以下是有关光标适配器的简单教程的链接: