2011-06-08 80 views
0

我有一个奇怪的问题,第一次启动应用程序,它运行良好,第二次崩溃,第三次作品,第四次崩溃等等.. 这里是logcat的:File.Listfile()强制关闭(空指针异常)

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 

所以,当代码达到getReaders(),它崩溃,并正好在这条线

int lengthtmp=f.listFiles().length; 

下面是函数:

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()); 
       } 
      } 
     } 
     } 
    } 

谁能告诉我为什么那行返回空? 谢谢。

回答

0

首先,由于您检查f是否为空,请检查是否f.exists()。因为如果这不存在,那么它就没有办法列出任何东西,因此它将是空的,这将导致你的异常。 这不完全是你的问题的答案,但尝试一下,看看会发生什么,并发布你的结果,所以我们可以给你一个更好的答案。

我还猜测你在第一次运行后删除了这个目录,但这只是猜测而没有看到实际的代码。

0

您可以尝试将变量“f”更改为更具描述性的内容。我遇到了android忽略1个字符变量。

+1

你是认真的吗? – 2011-06-08 08:03:09

+0

@Swaranga Sarma:是的。 – Kris 2011-06-08 08:04:21

0

listFiles在某些情况下可以返回null。尝试检查它是一个目录(File.isDirectory()),并且返回值不为空。