字符串数组长度给出空指针android

时间:2014-07-23 07:08:47

标签: java android arrays string nullpointerexception

在我的代码中,我正在动态地形成一个字符串数组。 然后,当我尝试通过"长度"来获取数组的大小时属性,应用程序崩溃发出空指针异常。 还有另一种获取数组长度的方法吗?

File Cur_folder=new File(""+folder.toString());
                String[] dirList=Cur_folder.list();
                int c=dirList.length;

Log cat:

07-23 03:02:40.477: E/AndroidRuntime(1576): FATAL EXCEPTION: AsyncTask #1
07-23 03:02:40.477: E/AndroidRuntime(1576): Process: com.example.nusearch, PID: 1576
07-23 03:02:40.477: E/AndroidRuntime(1576): java.lang.RuntimeException: An error occured while executing doInBackground()
07-23 03:02:40.477: E/AndroidRuntime(1576):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
07-23 03:02:40.477: E/AndroidRuntime(1576):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
07-23 03:02:40.477: E/AndroidRuntime(1576):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
07-23 03:02:40.477: E/AndroidRuntime(1576):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
07-23 03:02:40.477: E/AndroidRuntime(1576):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
07-23 03:02:40.477: E/AndroidRuntime(1576):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
07-23 03:02:40.477: E/AndroidRuntime(1576):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
07-23 03:02:40.477: E/AndroidRuntime(1576):     at java.lang.Thread.run(Thread.java:841)
07-23 03:02:40.477: E/AndroidRuntime(1576): Caused by: java.lang.NullPointerException
07-23 03:02:40.477: E/AndroidRuntime(1576):     at com.example.nusearch.MainActivity$StartIndexing.doInBackground(MainActivity.java:97)
07-23 03:02:40.477: E/AndroidRuntime(1576):     at com.example.nusearch.MainActivity$StartIndexing.doInBackground(MainActivity.java:1)
07-23 03:02:40.477: E/AndroidRuntime(1576):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
07-23 03:02:40.477: E/AndroidRuntime(1576):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-23 03:02:40.477: E/AndroidRuntime(1576):     ... 4 more

2 个答案:

答案 0 :(得分:1)

堆栈跟踪正在讨论Null指针异常,这意味着您描述为File对象的Cur_folder没有正确的路径。

当您调用方法list()时,它可以返回String数组中的文件列表或null。 以下是有关list()方法的文档。将金额直接存入整数是不安全的。

  

public String [] list()

     

返回一个字符串数组,用于命名文件和目录   此抽象路径名表示的目录。

     

如果此抽象路径名不表示目录,那么这个   方法返回null。否则返回一个字符串数组,一个   对于目录中的每个文件或目录。名称表示   目录本身和目录的父目录不包括在内   在结果中。每个字符串都是文件名而不是完整路径。 (...)

文档链接:http://docs.oracle.com/javase/7/docs/api/java/io/File.html#list%28%29

答案 1 :(得分:0)

检查文件夹是否存在是一个好习惯,我还建议您始终使用 try catch 保护文件访问代码。

int c = 0;
try {
    File Cur_folder = new File("" + folder.toString());
    if (Cur_folder.exists()) {
        String[] dirList = Cur_folder.list();
        c = dirList.length;
    }
}
catch (Exception e)
{
    Log.e(TAG,"Something failed. Check traces below for details!");
    e.printStackTrace();
}
// if any error happened then here you find c = 0
// if other case, c = number of files in Cur_folder

注意:

  • 使用.list()获得String []
  • 如果您需要File [],请尝试.listFiles()