2016-05-05 17 views
12

Ich mache eine Abfrage auf dem Mediastor Dateien Datenbank Android - MediaStore.Files.getContentUri("external") - und für einige bestimmten Ordner, sowohl die MediaStore.MediaColumns.TITLE und MediaStore.MediaColumns.DISPLAY_NAME während für andere Ordner null sind Dieser Wert existiert. Ich konnte keine Dokumentation über finden, die möglicherweise null ist.Android Mediastor Abfrage MediaStore.MediaColumns.TITLE Spalte ist null für einige Dateien

Dies geschieht für ein paar internen android Verzeichnisse, wie diese:

_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 

jedoch für einige anderen Ordner, der Titel ist da:

_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 

Alle Daten stammen direkt aus dem Mediastor Abfrage.

Ich bin mir bewusst, dass ich direkt mit den Daten arbeiten könnte, aber ich versuche, die Abfrage nach dem TITEL zu sortieren, was zu falschen Ergebnissen führt, da einige null sind.

Ist dies ein erwartetes Verhalten? Wie man damit umgehen und alle Dateien korrekt nach Titel sortiert abrufen?

+0

Ich frage mich, ob dies der richtige Weg sein sollte: http://stackoverflow.com/questions/8187828/sql-order-by -using-a-substring-in-a-specific-column-möglich – dwbrito

+0

Sie erhalten null Titel oder Anzeigename? –

+0

@HirenPatel Wenn es null ist, ist es sowohl für den Titel als auch für den Anzeigenamen null. Nur das Datenfeld ist gefüllt. – dwbrito

Antwort

1

Sieht aus wie dies eine Android-Beschränkung ist. Sie können immer versuchen, eine Bestellung durch, wie dies zu tun:

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; 

Beachten Sie, dass dies nicht rekursiv ist, funktioniert aber nur bis zu 3 ‚/‘.

Dies könnte rekursiv durchgeführt werden, aber es wurde erst später auf Android eingeführt