【问题标题】:String array length gives null pointer android字符串数组长度给出空指针android
【发布时间】:2014-07-23 07:08:47
【问题描述】:

在我的代码中,我正在动态形成一个字符串数组。 然后,当我尝试通过“长度”属性获取数组的大小时,应用程序崩溃并给出空指针异常。 还有其他方法可以获取数组长度吗?

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

原木猫:

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

【问题讨论】:

  • 然后发布您的代码....
  • 好的,请稍等..我会发布它
  • 似乎数组本身是null
  • 试试这个File[] dirList=Cur_folder.listFiles();看看here
  • 第97行是哪一个?

标签: java android arrays string nullpointerexception


【解决方案1】:

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

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

公共字符串[] 列表()

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

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

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

【讨论】:

    【解决方案2】:

    检查文件夹是否存在是一个好习惯,我还建议您始终使用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()

    【讨论】:

      猜你喜欢
      • 2010-11-08
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多