2016-05-05 1 views
12

Je fais une requête sur la base de données MediaStore fichiers de l'Android - MediaStore.Files.getContentUri("external") - et, pour certains dossiers spécifiques, à la fois la MediaStore.MediaColumns.TITLE et MediaStore.MediaColumns.DISPLAY_NAME sont nulles alors que pour d'autres dossiers cette valeur existe. Je n'ai trouvé aucune documentation sur MediaStore.MediaColumns.TITLE pouvant être nulle.colonne requête Android MediaStore MediaStore.MediaColumns.TITLE est nulle pour certains fichiers

Cela se produit pour quelques répertoires android internes, comme ceux-ci:

_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 

Cependant, pour d'autres dossiers, le titre est là:

_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 

Toutes les données proviennent directement de MediaStore question.

Je suis conscient que je pourrais travailler directement avec les données, mais j'essaie de trier la requête en fonction du titre, ce qui conduit à des résultats incorrects étant donné que certains sont null.

Est-ce un comportement normal? Comment faire face et récupérer tous les fichiers correctement triés par titre?

+0

Je me demande si cela devrait être le chemin aller à: http://stackoverflow.com/questions/8187828/sql-order-by -using-a-substring-within-a-specific-column-possible – dwbrito

+0

Vous obtenez un titre nul ou un nom d'affichage? –

+0

@HirenPatel quand il est nul, il est nul pour le titre et le nom d'affichage. Seul le champ de données est rempli. – dwbrito

Répondre

1

Cela ressemble à une limitation android. Vous pouvez toujours essayer de faire une commande par ce genre:

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; 

Notez que ce n'est pas récursive, mais ne fonctionne que jusqu'à 3 «/».

Cela pourrait se faire récursive mais il n'a été introduit que plus tard sur Android