尝试获取null数组错误的长度,如何解决?

问题描述:

我是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://*.com/questions/33296223/listfiles-returns-null-on-android-6-0-emulator-这是谷歌第一个“android listfiles null emulator” 。 –

你应该指定文件正确的路径。

要获得Externalstorage路径调用这个函数

Environment.getExternalStorageDirectory(); 

,如果你试图访问存在于SD卡Somefile文件夹

Environment.getExternalStorageDirectory()+"Somefile"为路径

,并列出文件经常检查前文件是否存在

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

public File[] listFiles() 

回报 抽象路径名表示此抽象路径名表示的目录中的文件和目录的数组。如果目录为空,该数组将为空。 如果此抽象路径名不表示目录或发生I/O错误,则返回null

正如你知道这可能返回NULL,所以最可能是你提供错误的道路,因此至少为空filearray一张支票,也验证路径