-1

J'ai besoin d'un chemin d'accès au répertoire de l'application Android pour mes applications compatilbe avec toutes les versions. J'ai beaucoup cherché et je n'ai pas encore trouvé quelque chose compatible avec TOUS les appareils. Maintenant, nous avons ce morceau de code, mais il donne toujours NullPointerExcepction à picturesDir.exists() avec U55 et ZTE appareils.Créer un répertoire d'applications Android compatible avec toutes les versions et les périphériques

File picturesDir; 
    String state = Environment.getExternalStorageState(); 
    // Make sure it's available, if there is no SD card, create new directory objects to make 
    // directory on device. 
    if (!Environment.MEDIA_MOUNTED.equals(state)) { 
     picturesDir = new File(Environment.getDataDirectory() + "/data/" + getApplicationContext().getPackageName() + "/Pictures/"); 
    } else if (Environment.getExternalStorageState() != null) { 
     picturesDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); 
    } else{ 
     String externalStoragePath = Environment.getExternalStorageDirectory() 
       .getAbsolutePath(); 
     picturesDir = new File(externalStoragePath + getApplicationContext().getPackageName() + "/Pictures/"); 
    } 

    if (!picturesDir.exists()) { 
     picturesDir.mkdir(); 
    } 

enter image description here

Que devons-nous faire? Je ne veux pas vérifier si elle est nulle pour éviter le crash. Je veux un chemin où je peux enregistrer des images. Merci.

+0

"il donne toujours NullPointerExcepction" - veuillez éditer votre question et publier la trace complète de la pile Java associée à cette exception. Je crois que votre algorithme, autant que l'appareil, est la source de votre difficulté, et la trace de la pile m'aidera à confirmer vos symptômes. – CommonsWare

+0

Même si vous évitez en quelque sorte une erreur lors de la vérification de l'état de la carte SD, il est possible que la carte SD soit extraite à tout moment ou qu'une erreur E/S se produise. Donc, vous devez attraper des erreurs d'E/S de toute façon. N'essayez pas de rendre ce code joli à tout prix, vous ne pouvez pas le faire. – user1643723

+0

Vous venez d'éditer CommonsWare! –

Répondre

1

Par la documentation de getExternalFilesDir: "le chemin absolu du répertoire spécifique à l'application peut renvoyer une valeur nulle si le stockage partagé n'est pas disponible actuellement". Donc, selon la documentation, vous avez pour vérifier null, si vous utilisez getExternalFilesDir.

Il peut y avoir d'autres raisons pour lesquelles le stockage externe n'est pas disponible en plus de ne pas être monté. Il existe également une possibilité de course entre l'appel getExternalStorageState et l'appel getExternalFilesDir. En d'autres termes, la carte SD peut être démontée immédiatement après que l'appel à getExternalStorageState() l'a signalé comme monté, mais avant l'appel de getExternalFilesDir. Cette condition de course peut entraîner votre accident.

+0

Merci! Je vais vérifier et si certains utilisateurs donnent encore cette erreur, je reviendrai ici. Merci. –