尝试获取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)
答
你应该指定文件正确的路径。
要获得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一张支票,也验证路径。
“尝试获取空数组长度”的哪一部分不清楚? –
我不知道为什么listFile()在模拟器上返回null的同时在note4上正常工作。我检查了路径。它不是空的。 –
现在它是另一个的副本 - http://stackoverflow.com/questions/33296223/listfiles-returns-null-on-android-6-0-emulator-这是谷歌第一个“android listfiles null emulator” 。 –