Android开发PDF阅读器应用NullPointerException问题排查与咨询
问题解答
一、在runtimePermission()方法中调用displayPdf()是否合理?
整体逻辑合理:扫描PDF需要读取外部存储权限,在权限授予成功的回调里触发扫描,符合Android权限机制要求。但可以做以下优化:
- 在
onPermissionGranted回调中,再次检查权限状态,避免系统回调异常或权限临时回收导致操作失败; - 补充权限被拒绝的处理逻辑,比如提示用户前往设置页开启权限,避免应用无响应;
- 若
displayPdf()包含耗时的文件扫描操作,需放到子线程执行,防止阻塞主线程引发ANR。
二、修复findPdf()递归方法的NullPointerException
根据异常堆栈,空指针出现在findPdf()第63行,且多次递归调用,核心原因是文件遍历过程中未做非空校验。具体修复方案:
校验传入的File对象
在方法开头添加非空判断,避免传入null触发异常:private void findPdf(File file) { if (file == null) { return; } // 后续业务逻辑 }处理
listFiles()返回null的场景
当目录无读取权限、非目录或系统无法获取目录内容时,listFiles()会返回null,必须提前拦截:if (file.isDirectory()) { File[] files = file.listFiles(); if (files == null) { return; } for (File f : files) { findPdf(f); } }校验文件有效性
遍历前确认当前File对象存在且可读取:if (!file.exists() || !file.canRead()) { return; }文件名非空校验
若第63行是处理文件名的逻辑(如判断是否为PDF后缀),需确保文件名不为null:String fileName = file.getName(); if (fileName == null || !fileName.toLowerCase().endsWith(".pdf")) { return; }
内容的提问来源于stack exchange,提问作者Sachin Bhujbal
相关产品推荐
相关产品推荐

