#android #sql #cursor #projection #mediastore
#Android #sql #курсор #проекция #mediastore
Вопрос:
Я хочу выполнить управляемый запрос с использованием Android SDK, где возвращаемые результаты фильтруются по соответствующему расширению файла (например, не обязательно по имени). Я провел немало исследований, устал и надеюсь, что сообщество сможет мне помочь.. Я уверен, что ответ есть, но вместо чтения книги по 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 также отсортированы в алфавитном порядке, но я хочу, чтобы весь список был в алфавитном порядке независимо от типа файла.
Я знаю, что кто-то здесь может легко ответить на этот вопрос -> заранее спасибо!!!
Комментарии:
1. что, если вы поместите «.» как {«%.mp3%»}?
2. Я пробовал %.mp3% раньше, но что-то еще, синтаксически, должно быть, было отключено, потому что это вызвало сбой, но теперь, да, это работает…. ОДНАКО, как заставить его работать для %.mp3% И %.wav% ??? (добавление другой строки в массив не работает; это вызывает сбой с сообщением: E / AndroidRuntime(9407): java.lang.RuntimeException: не удается запустить activity … android.database.sqlite. Исключение SQLiteException: привязка или индекс столбца вне диапазона: обрабатывать 0x388060
3. Попробуйте это, managedQuery (Аудио. Медиафайлы. EXTERNAL_CONTENT_URI, myProjection, Audio. Медиафайлы. ДАННЫЕ » нравится ? «, новая строка [] {«%.mp3″,»%.wav»}, null ); и дайте мне знать, что произойдет.
4. нет, это не работает. Я получаю ошибку, упомянутую в моем предыдущем комментарии… Но мне нравится помощь!!! Понравилось бы еще больше, если бы мы могли заставить его работать
![]()
5. попробуйте запрос, предложенный Куртисом Нусбаумом?
Ответ №1:
Я думаю, все, что вам нужно сделать, это изменить %mp3%
на %mp3
. Это приведет к тому, что «mp3» будет находиться в конце имени файла.
Если вам нужно выбрать несколько типов файлов, сделайте это следующим образом:
managedQuery(
Audio.Media.EXTERNAL_CONTENT_URI,
myProjection,
Audio.Media.DATA " like ? OR " Audio.Media.DATA " like ? ",
new String[] {"%mp3","%wav"},
MediaStore.Audio.Media.TITLE " ASC" );
Комментарии:
1. хорошо. Я думаю, что это немного лучше, чем ставить %.mp3%, как обсуждалось в комментариях выше. Тем не менее, мне все еще нужно иметь возможность иметь несколько selectionArgs (например, иметь возможность возвращать оба. файлы wav и .mp3) (и, желательно, все отсортированные). У вас есть решение?
2. Отлично сработало!! Спасибо за обновление вашего ответа! Я пробовал аудио. Медиафайлы. ДАННЫЕ » нравится ? ИЛИ как? » безрезультатно; не подумал попробовать и добавить второй ‘Audio. Медиафайлы. ДАННЫЕ ‘ там. БОЛЬШОЕ ВАМ СПАСИБО!! (и спасибо, пользователь370305, а также за вашу помощь / усердие!)
3. Да, это своего рода облом, который вы должны добавить аудио. Медиафайлы. ДАННЫЕ дважды, но это всего лишь синтаксис SQL для вас.
4. Хорошо, один последний (я клянусь) вопрос -> как сделать порядок сортировки ‘MediaStore. Аудио. Медиафайлы. TITLE «ASC»‘ сортировать результирующий список без учета регистра? Все мои вещи, которые начинаются со строчной буквы «a», находятся внизу вещей, которые начинаются с прописной буквы «Z» …???
5. @fatfreddyscat если у вас есть другой вопрос, пожалуйста, задайте его как другой вопрос. Таким образом, другим людям, которые ищут что-то подобное в будущем, не нужно смотреть на наши комментарии назад и вперед … и поэтому я могу получить больше репутации
![]()