首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从安卓外部存储读取文件时的NullPointerException

从安卓外部存储读取文件时的NullPointerException
EN

Stack Overflow用户
提问于 2018-06-11 15:26:16
回答 2查看 719关注 0票数 0

我在尝试从Android外部SD卡读取zip文件时遇到了一些问题。

下面是我的代码:

File[] fileArr = mVersionUpgradeViewModel.getZipFileFromSDCard();
for(int i = 0; i < fileArr.length; i++){
    System.out.println(fileArr[i]);
}

public File[] getZipFileFromSDCard() {
    File[] matchingFiles = new File[0];
    File f = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
    if(f.exists()) {
        matchingFiles = f.listFiles(new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.endsWith("zip");
            }
        });
    }
    return matchingFiles;
}

和我的模拟器文件夹结构:

zip文件夹在那里。但是使用上面的代码,我得到的错误消息如下:

Caused by: java.lang.NullPointerException: Attempt to get length of null array
    at com.mainapp.asynctask.VersionUpgradeTask.doInBackground(VersionUpgradeTask.java:86)
    at com.mainapp.asynctask.VersionUpgradeTask.doInBackground(VersionUpgradeTask.java:15)
    at android.os.AsyncTask$2.call(AsyncTask.java:333)

错误指向第一个for循环。上一次它是有效的。但是在我尝试了新版本的安装代码后,上面的方法就失效了。有什么想法吗?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-06-11 15:33:23

您确定您有读外部存储的权限吗

List<File> fileArr = getZipFileFromSDCard();
    for (int i = 0; i < fileArr.size(); i++) {
        System.out.println(fileArr.get(i));
    }

 public List<File> getZipFileFromSDCard() {
    List<File> matchingFiles = new ArrayList<>();
    File wallpaperDirectory = new File(Environment.getExternalStorageDirectory().toString());
    File[] files = wallpaperDirectory.listFiles();
    for (File file : files) {
        if (file.getName().endsWith("pdf")) {
            matchingFiles.add(file);
        }
    }

    return matchingFiles;
}
票数 0
EN

Stack Overflow用户

发布于 2018-06-11 15:48:36

您使用一个包含0个元素的数组初始化matchingFiles

File[] matchingFiles = new File[0];

然后检查Environment.DIRECTORY_DOWNLOADS是否存在,如果存在,则将matchingFiles重新创建为其中以zip结尾的文件数组。

堆栈跟踪清楚地表明错误不是从该方法抛出的,但可以安全地假设该方法的结果有问题。

现在,matchingFiles后来是一个null数组,所以Environment.DIRECTORY_DOWNLOADS确实存在,所以您不具有该文件夹的读取权限,或者Environment.DIRECTORY_DOWNLOADS没有被设置为所示结构中的下载文件夹,或者您正在检查的压缩文件被限制为运行应用程序的用户。

您可能希望检查matchingFiles是否为null,如果是,请在方法的末尾将其设置为new File[0]以改进您的代码,但解决方案显然是检查您对文件夹和文件的权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50792390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档