【发布时间】:2011-12-17 11:34:02
【问题描述】:
我想使用 Android SDK 执行 managedQuery,返回的结果由它们各自的文件 extension 过滤(例如,不一定是名称)。我已经做了很多研究并且很累,希望社区可以帮助我。我确信答案就在那里,但是,代替阅读 SQL 书籍或其他什么,我只是想做点什么这应该很简单,但没有找到解决方案。
我想要做的基本上是这样的:
managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, myProjection, Audio.Media.DATA + " like ? ", new String[] {"%mp3%"}, null );
这有效,除非标题类似于“mymp3.wav”,此查询仍将返回它,因为名称中有“mp3”,但这不是我想要的 -> 我希望它纯粹被过滤基于文件扩展名(或者,如果有办法做到这一点,文件类型[例如,如果 mp3 的文件扩展名更改为 .wav,即使文件的内容实际上是 mp3,这将适用于我的目的好吧])。该解决方案应指明一种过滤多种扩展名/文件类型的方法(例如,如果我希望查询返回所有 .mp3 文件以及 .wav 文件但不返回 .amr 文件)。
此外,虽然我有你,但我想按字母顺序对结果进行排序。我尝试过类似的方法:
managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, myProjection, null, null, MediaStore.Audio.Media.TITLE + " ASC" );
但是,这不会过滤 整个 结果...也就是说,返回的列表按 mp3 标题排序,然后在最后附加列表中的 .wav 文件也按字母顺序排序,但我希望整个列表按字母顺序排列,无论文件类型如何。
我知道这里有人可以很容易地回答这个问题 -> 在此先感谢!!!
【问题讨论】:
-
如果你把“.”喜欢 {"%.mp3%"}?
-
我之前尝试过 %.mp3% 但是,从语法上讲,肯定是关闭了其他东西,因为它导致了崩溃,但是现在,是的,它可以工作....但是,如何制作为 %.mp3% 和 %.wav% 工作??? (向数组添加另一个字符串不起作用;它会导致崩溃并显示以下消息:E/AndroidRuntime(9407): java.lang.RuntimeException: Unable to start activity ... android.database.sqlite.SQLiteException: bind or列索引超出范围:句柄 0x388060
-
试试这个,managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, myProjection, Audio.Media.DATA + "like ?", new String[] {"%.mp3","%.wav"},空值 );让我知道发生了什么。
-
不,这行不通。我收到了我之前评论中提到的错误......但是,我喜欢帮助!如果我们能让它发挥作用,会更喜欢它;)
-
试试 Kurtis Nusbaum 建议的查询?
标签: android sql cursor projection mediastore