java.lang.NullPointerException:尝试获取null数组的长度

时间:2015-11-30 07:17:45

标签: java android nullpointerexception

我是Java和Android开发的新手。我有兴趣构建一个可以将我的Android手机(Nexus5)中的文件夹同步到Amazon Web服务(AWS)的应用程序。我正在尝试基于开源项目构建。但是,我收到此代码段的以下错误,无法找到我的错误。此时您的反馈将非常有用。

private void loadFileList(File path) {
    this.currentPath = path;
    List<String> r = new ArrayList<String>();
    if (path.exists()) {
        if (path.getParentFile() != null) r.add(PARENT_DIR);
        FilenameFilter filter = new FilenameFilter() {
            public boolean accept(File dir, String filename) {
                File sel = new File(dir, filename);
                if (!sel.canRead()) return false;
                if (selectDirectoryOption) return sel.isDirectory();
                else {
                    boolean endsWith = fileEndsWith != null ? filename.toLowerCase().endsWith(fileEndsWith) : true;
                    return endsWith || sel.isDirectory();
                }

            }

            {
                FileDialog a = FileDialog.this;
                //a.super();
            }
        };
        String[] fileList1 = path.list(filter);
        for (String file : fileList1) {     <-- Error in this line
            r.add(file);
        }
    }
    fileList = (String[]) r.toArray(new String[0]);
}

错误:

 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime: FATAL EXCEPTION: main
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime: Process: pavan.syncfile, PID: 24102
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime: java.lang.NullPointerException: Attempt to get length of null array
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime:     at pavan.syncfile.FileDialog.loadFileList(FileDialog.java:149)
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime:     at pavan.syncfile.FileDialog.<init>(FileDialog.java:45)
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime:     at pavan.syncfile.SendFile$1.onClick(SendFile.java:56)
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime:     at android.view.View.performClick(View.java:5198)
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:21147)
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
 11-30 01:03:23.880 24102-24102/pavan.syncfile E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

1 个答案:

答案 0 :(得分:0)

这条线的意图 String [] fileList1 = path.list(filter);是列出目录中的子文件。

这里你得到的文件列表[1]是空的,因为在匹配过滤器的路径文件夹中没有子文件。

您可以在此行之前添加空检查

for (String file : fileList1) {     <-- Error in this line
            r.add(file);
        }

if(fileList1!=null)
{
for (String file : fileList1) {     <-- Error in this line
            r.add(file);
        }
}