2016-05-05 35 views
12

Robię zapytanie o Mediastore pliki bazy danych w Android - MediaStore.Files.getContentUri("external") - a dla niektórych konkretnych folderów, zarówno MediaStore.MediaColumns.TITLE i MediaStore.MediaColumns.DISPLAY_NAME tracą natomiast dla innych folderów ta wartość istnieje. Nie można znaleźć żadnej dokumentacji o wartości prawdopodobnie MediaStore.MediaColumns.TITLE.kolumna Android Mediastore zapytania MediaStore.MediaColumns.TITLE jest nieważna dla niektórych plików

Dzieje się tak z kilku wewnętrznych android katalogów, takich jak te:

_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 

Jednak dla niektórych innych folderów, tytuł jest tam:

_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 

Wszystkie dane pochodzą bezpośrednio z Mediastore pytanie.

Jestem świadomy mogłem pracować bezpośrednio z danymi, ale staram się uporządkować zapytanie według tytułu, co prowadzi do błędnych wyników, zważywszy, że niektóre są puste.

Czy to oczekiwane zachowanie? Jak sobie z tym poradzić i odzyskać wszystkie pliki poprawnie posortowane według tytułu?

+0

Zastanawiam się, czy powinien to być sposób na stronie: http://stackoverflow.com/questions/8187828/sql-order-by -using-a-substring-within-a-specific-column-possible – dwbrito

+0

Otrzymujesz zerowy tytuł lub wyświetlaną nazwę? –

+0

@HirenPatel, gdy jest pusty, jest pusty dla nazwy tytułu i wyświetlanej. Tylko pole danych jest wypełnione. – dwbrito

Odpowiedz

1

Wygląda na to, że jest to android ograniczenie. Zawsze możesz spróbować zrobić zamówienie, takie jak ten:

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; 

Zauważ, że to nie jest rekurencyjny, ale działa tylko na okres do 3 „/”.

Można to zrobić rekursywnie, ale została ona wprowadzona dopiero później na Androida