【问题标题】:java.lang.NullPointerException: Attempt to get length of null array [duplicate]java.lang.NullPointerException:尝试获取空数组的长度[重复]
【发布时间】:2015-11-30 07:17:44
【问题描述】:

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

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)

【问题讨论】:

  • path.list(filter) 可能返回 null。

标签: java android nullpointerexception


【解决方案1】:

这一行的意图 String[] fileList1 = path.list(filter);就是列出目录下的子文件。

这里你得到 fileList1[] 为空,因为路径文件夹中没有与过滤器匹配的子文件。

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

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);
        }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2015-07-01
    • 1970-01-01
    • 2021-04-20
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多