2011-06-08 5 views
0

J'ai un problème étrange où, la première fois que vous démarrez l'application, cela fonctionne bien, la deuxième fois il se bloque, le 3ème fonctionne, le quatrième plante et ainsi de suite .. Voici le logcat:File.Listfile() force ferme (NullPointerException)

E/AndroidRuntime(18039): FATAL EXCEPTION: main 
E/AndroidRuntime(18039): java.lang.RuntimeException: Unable to start activity Co 
mponentInfo{omar.quran1/omar.quran1.Quran}: java.lang.NullPointerException 
E/AndroidRuntime(18039):  at android.app.ActivityThread.performLaunchActiv 
ity(ActivityThread.java:1768) 
E/AndroidRuntime(18039):  at android.app.ActivityThread.handleLaunchActivi 
ty(ActivityThread.java:1784) 
E/AndroidRuntime(18039):  at android.app.ActivityThread.access$1500(Activi 
tyThread.java:123) 
E/AndroidRuntime(18039):  at android.app.ActivityThread$H.handleMessage(Ac 
tivityThread.java:939) 
E/AndroidRuntime(18039):  at android.os.Handler.dispatchMessage(Handler.ja 
va:99) 
E/AndroidRuntime(18039):  at android.os.Looper.loop(Looper.java:130) 
E/AndroidRuntime(18039):  at android.app.ActivityThread.main(ActivityThrea 
d.java:3835) 
E/AndroidRuntime(18039):  at java.lang.reflect.Method.invokeNative(Native 
Method) 
E/AndroidRuntime(18039):  at java.lang.reflect.Method.invoke(Method.java:5 
07) 
E/AndroidRuntime(18039):  at com.android.internal.os.ZygoteInit$MethodAndA 
rgsCaller.run(ZygoteInit.java:847) 
E/AndroidRuntime(18039):  at com.android.internal.os.ZygoteInit.main(Zygot 
eInit.java:605) 
E/AndroidRuntime(18039):  at dalvik.system.NativeStart.main(Native Method) 

E/AndroidRuntime(18039): Caused by: java.lang.NullPointerException 
E/AndroidRuntime(18039):  at omar.quran1.Quran.getReaders(Quran.java:565) 
E/AndroidRuntime(18039):  at omar.quran1.Quran.onCreate(Quran.java:414) 
E/AndroidRuntime(18039):  at android.app.Instrumentation.callActivityOnCre 
ate(Instrumentation.java:1047) 
E/AndroidRuntime(18039):  at android.app.ActivityThread.performLaunchActiv 
ity(ActivityThread.java:1722) 
E/AndroidRuntime(18039):  ... 11 more 

Ainsi, lorsque le code atteint getReaders(), il se bloque, et exactement sur cette ligne

int lengthtmp=f.listFiles().length; 

Voici la fonction:

public void getReaders() 
    { 
     File f = new File(SuraDatabase.Audio_PATH); 
     if(f!=null) 
     { 
     int lengthtmp=f.listFiles().length; //It crashes here - NullPointerException 
     if(lengthtmp==0||lengthtmp>10) 
     { 
      SoundFiles=false; 
     } 
     else 
     { 
      SoundFiles=true; 
      File[] readArrays=f.listFiles(); 
      for(int i =0;i<lengthtmp;i++) 
      { 
       if(readArrays[i].isDirectory()) 
       { 
        ReaderOptions.add(readArrays[i].getName()); 
       } 
      } 
     } 
     } 
    } 

Quelqu'un peut-il me dire pourquoi cette ligne retourne Null? Merci.

Répondre

0

Tout d'abord, puisque vous vérifiez si f est nul, vérifiez à la place si f.exists(). Parce que si cela n'existe pas, alors il n'y a aucun moyen de lister quoi que ce soit, donc ce serait null, ce qui causerait votre exception. Ce n'est pas exactement une réponse à votre question, mais essayez cela et voyez ce qui se passe, et postez vos résultats afin que nous puissions vous donner une meilleure réponse.

Je suppose également que vous êtes en train de supprimer ce répertoire après votre première exécution, mais c'est juste une supposition sans voir le code réel.

0

Vous pouvez essayer de changer votre variable "f" pour quelque chose de plus descriptif. J'ai rencontré Android en ignorant une variable de 1 caractère.

+1

Êtes-vous sérieux? –

+0

@Swaranga Sarma: oui. – Kris

0

listFiles peut renvoyer une valeur nulle dans certains cas. Essayez de vérifier que c'est un répertoire (File.isDirectory()) et que la valeur de retour n'est pas nulle.

Questions connexes