Запрос MediaStore для Android MediaStore.MediaColumns.TITLE столбец для некоторых файлов имеет значение null
Я делаю запрос к базе данных файлов Android MediaStore - MediaStore.Files.getContentUri("external")
- и для некоторых конкретных папок как MediaStore.MediaColumns.TITLE
, так и MediaStore.MediaColumns.DISPLAY_NAME
равны нулю, а для других папки это значение существует. Я не смог найти никакой документации о том, что MediaStore.MediaColumns.TITLE может быть нулевым.
Это происходит для нескольких внутренних каталогов Android, таких как эти:
_data: /storage/emulated/0/Music, title: null, _display_name: null
_data: /storage/emulated/0/Notifications, title: null, _display_name: null
_data: /storage/emulated/0/Pictures, title: null, _display_name: null
Однако для некоторых других папок есть заголовок:
_data: /storage/emulated/0/Android, title: Android, _display_name: null
_data: /storage/emulated/0/DCIM, title: DCIM, _display_name: null
_data: /storage/emulated/0/Download, title: Download, _display_name: null
Все данные поступают напрямую из запроса MediaStore.
Я знаю, что могу работать непосредственно с данными, но я пытаюсь отсортировать запрос в соответствии с НАЗВАНИЕМ, что приводит к неверным результатам, учитывая, что некоторые из них равны нулю.
Это ожидаемое поведение? Как с этим бороться и получить все файлы, правильно отсортированные по названию?
Ответы
Ответ 1
Похоже, это ограничение для Android.
Вы всегда можете попробовать сделать такой порядок:
select substr(
substr(substr(MediaStore.MediaColumns.DATA, instr(MediaStore.MediaColumns.DATA, '/') + 1), instr(substr(MediaStore.MediaColumns.DATA, instr(MediaStore.MediaColumns.DATA, '/') + 1), '/') + 1),
instr(substr(substr(MediaStore.MediaColumns.DATA, instr(MediaStore.MediaColumns.DATA, '/') + 1), instr(substr(MediaStore.MediaColumns.DATA, instr(MediaStore.MediaColumns.DATA, '/') + 1), '/') + 1), '/') + 1
) from tablename;
Обратите внимание, что это не рекурсивно, но работает только до 3 '/'.
Это можно сделать рекурсивно, но оно было введено позднее на Android