2016-05-16 167 views
0

我是android studio的新手。我的問題是當我運行代碼模擬器跳出應用程序。但是當我用一個簡單的setName()方法替換searchtxtFile()方法時,應用程序運行時沒有問題。我在note4上測試了應用程序,它工作正常,但在模擬器上listFiles()返回null。我檢查了路徑。我在IntelliJ Idea上運行了這段代碼,它工作正常,但在Android Studio上它有錯誤:「java.lang.NullPointerException:嘗試獲取空數組的長度」嘗試獲取null數組錯誤的長度,如何解決?

Thanx提前。

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    List<Integer> fileNos=new ArrayList<Integer>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ShowFileDirectory fileList = new ShowFileDirectory(); 
     fileList.searchtxtFiles("d://sampleb",fileNos);  -->(Line20) 
    } 

} 

ShowFileDirectory.java

import java.io.*; 
import java.util.Collections; 
import java.util.List; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class ShowFileDirectory { 

    public String setName(String name){ 
     return name; 
    } 

    public void searchtxtFiles(String folderAddress, List<Integer> fileNos2) { 

     File directory; 
     int fileNo=0; 
     directory = new File(folderAddress); 
     File[] filesInsideDirectory=directory.listFiles(); 
     int j=0; 

     for(File file : filesInsideDirectory){   -->(Line 73) 
      String extension = ""; 
      int i = file.getName().lastIndexOf('.'); 
      if (i > 0) { 
       extension = file.getName().substring(i+1); 
      } 
      if (extension.equals("txt")) { 
       fileNo= Integer.parseInt(file.getName().substring(0,i)); 
       fileNos2.add(fileNo); 
       j++; 
      } 
     } 
    } 

} 

的logcat的是:

05-16 20:47:47.990 2942-2942/com.ali.searchfiles I/Process: Sending signal. PID: 2942 SIG: 9 
    05-16 20:47:53.974 4065-4065/com.ali.searchfiles W/System: ClassLoader referenced unknown path: /data/app/com.ali.searchfiles-1/lib/x86 
    05-16 20:47:55.373 4065-4065/com.ali.searchfiles W/System: ClassLoader referenced unknown path: /data/app/com.ali.searchfiles-1/lib/x86 
    05-16 20:47:55.461 4065-4065/com.ali.searchfiles W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android. graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package- private method in android.graphics.drawable.Drawable 
    05-16 20:47:55.494 4065-4065/com.ali.searchfiles D/AndroidRuntime: Shutting down VM 


                   --------- beginning of crash 
    05-16 20:47:55.494 4065-4065/com.ali.searchfiles E/AndroidRuntime: FATAL EXCEPTION: main 
     Process:  com.ali.searchfiles, PID: 4065 
     java.lang.RuntimeException: Unable to start activity  ComponentInfo{com.ali.searchfiles/com.ali.searchfiles.MainActivity}: java.lang.NullPointerException: Attempt to get length of null array 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:148) 
      at android.app.ActivityThread.main(ActivityThread.java:5417) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
     Caused by: java.lang.NullPointerException: Attempt to get length of null array 
      at com.ali.searchfiles.ShowFileDirectory.searchtxtFiles(ShowFileDirectory.java:73) 
      at com.ali.searchfiles.MainActivity.onCreate(MainActivity.java:20) 
      at android.app.Activity.performCreate(Activity.java:6237) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:148) 
      at android.app.ActivityThread.main(ActivityThread.java:5417) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+0

「嘗試獲取空數組長度」的哪一部分不清楚? –

+0

我不知道爲什麼listFile()在模擬器上返回null的同時在note4上正常工作。我檢查了路徑。它不是空的。 –

+0

現在它是另一個的副本 - http://stackoverflow.com/questions/33296223/listfiles-returns-null-on-android-6-0-emulator-這是谷歌第一個「android listfiles null emulator」 。 –

回答

0

你應該指定文件正確的路徑。

要獲得Externalstorage路徑調用這個函數

Environment.getExternalStorageDirectory(); 

,如果你試圖訪問存在於SD卡Somefile文件夾

Environment.getExternalStorageDirectory()+"Somefile"爲路徑

,並列出文件經常檢查前文件是否存在

File f=new File("path"); 
    if(f.exists()){ 
     //Do file operation 
    }else{ 
     //File not exist. 
    } 
0
public File[] listFiles() 

回報 抽象路徑名錶示此抽象路徑名錶示的目錄中的文件和目錄的數組。如果目錄爲空,該數組將爲空。 如果此抽象路徑名不表示目錄或發生I/O錯誤,則返回null

正如你知道這可能返回NULL,所以最可能是你提供錯誤的道路,因此至少爲空filearray一張支票,也驗證路徑

相關問題