IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Recheche de fichier : pointeur nul


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Recheche de fichier : pointeur nul
    Bonjour à toutes et à tous,

    Je reprends de vieilles applis développées pour android 4.1.2 pour les porter pour android 10. Certaines fonctionnent et d'autres pas. Entre autres problèmes, j'ai le suivant : dans cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    	public static String[] fchAvecExt(File dirF, final String ext) {
    		FilenameFilter fltExt = new FilenameFilter() {
    			public boolean accept(File dir, String name) {
    				return name.endsWith(ext);
    			}
    		};
    		String[] lst = dirF.list(fltExt); // Liste des fichiers dans ce répertoire ayant l'extension "ext"
    		Arrays.sort(lst, new Comparator<String>() { // Classement alphabétique des fichiers
    			@Override
    			public int compare(String s1, String s2) {
    				return s1.compareToIgnoreCase(s2);
    			}
    		});
    		return lst;
    	}
    à la ligne (8 ci-dessus et 286 dans mon appli), il m'est dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        java.lang.NullPointerException: Attempt to get length of null array
            at java.util.Arrays.sort(Arrays.java:1424)
            at com.example.Fichiers.FCH.fchAvecExt(FCH.java:286)
    Le pointeur qui est nul et qui ne gênait pas avant devient maintenant rédhibitoire. Comment modifier cela ?

    Merci de votre aide.

    Pierre.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Vérifier que lst n'est pas null avant de l'utiliser.

    Il est peut être null à cause d'une permission manquante ou d'un dossier innexistant.
    L'idéal étant quand même de comprendre pourquoi on te retourne null au lieu d'un tableau.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    En fait, j'ai l'impression que beaucoup de mes problèmes viennent du fait que je cherche à avoir accès (comme avant) à ma carte SD sur laquelle l'écris/lis mes fichiers.

    Il semble que cette gestion s'est fameusement compliquée. A la rigueur, je veux bien que mes fichiers ne soient plus sur une carte SD, mais dans la mémoire propre du smartphone (avec mon Galaxy A41, je dispose de 64 Go qui devraient me suffire).

    Mon problème est alors de pouvoir lire/écrire dans cette mémoire.

    Je reviendrai vers vous avec plus de détails sur ce que je souhaiterais éclaircir.

    Cordialement.

    Pierre.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Oui l'accès à la carte SD n'est plus open comment avant.
    Il est effectivement recommender d'écrire directement dans le dossier de ton application si tu n'as pas besoin de facilement avoir accès aux données sur un autre support.

    Tu peux lire ce message sur stackoverflow qui résume parfaitement la situation
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    J'avais bien vu qu'il fallait des permissions dans le corps de l'appli. Pour autant, je ne m'en sors pas.

    Je cherche à lire et écrire dans le répertoire "Memo" existant sur la carte SD. J'ai par ailleurs dupliqué ce répertoire et son contenu dans la mémoire de 64 Go du smartphone.

    Dans le manifest, j'ai la permission WRITE_EXTERNAL_STORAGE

    Voici le début de mon appli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		context = this;
    		FCH.context = this;
    		MEMO.context = this;
    		...
    		int permissionCheck = ContextCompat.checkSelfPermission(this,
    				Manifest.permission.WRITE_EXTERNAL_STORAGE);
    		FCH.dirMemo = FCH.defRep("Memo"); // Le nom du répertoire de stockage est "Memo"
    		File[] fchMemo = FCH.listeFch(FCH.dirMemo, "Memo", ".txt");
    		...
    la procédure FCH.defRep

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	public static File defRep(String rep) {
    		File sdCard = Environment.getExternalStorageDirectory();
    		if (android.os.Build.VERSION.SDK_INT > 16)
    			dirSvg = new File ("/storage/extSdCard"); // fonctionne en version android > 4.1.2
    		else
    			dirSvg = new File(SecondStorage()); // fonctionne en version android 4.1.2
    		if (dirSvg.canExecute())
    			dirSvg = new File(dirSvg.getAbsolutePath(), rep);
    		else
    			dirSvg = new File(sdCard.getAbsolutePath(), rep);
    		dirSvg.mkdir();
    		return dirSvg;
    	}
    et la procédure FCH.listFch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	public static File[] listeFch(File dirF, final String prefx, final String ext) {
    		final int lPrefx = prefx.length();
    		FilenameFilter fltExt = new FilenameFilter() {
    			public boolean accept(File dir, String name) {
    				return (name.substring(0, lPrefx).equals(prefx) && name.endsWith(ext));
    			}
    		};
    		return dirF.listFiles(fltExt);
    	}
    Quand je débogue mon appli, voici ce que j'obtiens :

    • permissionCheck = -1. Je suppose alors que la permission n'est pas accordée, que faire pour qu'elle le soit ?
    • dans la méthode "defRep" :
    • sdCard vaut : "/storage/emulated/0" d'après ce que j'ai compris, ce nest pas la carte sd? mais la mémoire de 64 Go du smartphone
    • dirSvg vaut : "/storage/extSdCard"
    • dirSvg.canExecute() est faux et donc "dirSvg = new File(sdCard.getAbsolutePath(), rep);" vaut ""/storage/emulated/0/Memo"
    • et au retour de la méthode, "FCH.dirMemo" vaut "NULL".


    Je suppose que ces problèmes viennent du fait que la permission n'est pas accordée, que faire pour qu'elle le soit ?

    Cordialement.

    Pierre.

  6. #6
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Je pense que le solution à mon problème se trouve dans les explications de ce lien : Request app permissions, mais j'avoue que ça me dépasse et si vous pouviez m'aider à en extraire la "substantifique moelle", ça m'arrangerait bien.

    Cordialement.

    Pierre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pointeur nul
    Par gkn28 dans le forum Langage
    Réponses: 15
    Dernier message: 13/08/2013, 14h17
  2. auto_ptr sur pointeur nul.
    Par deubelte dans le forum C++
    Réponses: 4
    Dernier message: 23/11/2011, 10h50
  3. Réponses: 2
    Dernier message: 27/03/2009, 22h01
  4. Pointeur nul sur une vidéo, problème de codec ?
    Par HellHammer dans le forum OpenCV
    Réponses: 0
    Dernier message: 13/03/2009, 10h58
  5. Réponses: 9
    Dernier message: 07/07/2008, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo