2011-06-08 82 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()),並且返回值不爲空。