You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发PDF阅读器应用NullPointerException问题排查与咨询

问题解答

一、在runtimePermission()方法中调用displayPdf()是否合理?

整体逻辑合理:扫描PDF需要读取外部存储权限,在权限授予成功的回调里触发扫描,符合Android权限机制要求。但可以做以下优化:

  • 在onPermissionGranted回调中,再次检查权限状态,避免系统回调异常或权限临时回收导致操作失败;
  • 补充权限被拒绝的处理逻辑,比如提示用户前往设置页开启权限,避免应用无响应;
  • 若displayPdf()包含耗时的文件扫描操作,需放到子线程执行,防止阻塞主线程引发ANR。

二、修复findPdf()递归方法的NullPointerException

根据异常堆栈,空指针出现在findPdf()第63行,且多次递归调用,核心原因是文件遍历过程中未做非空校验。具体修复方案:

  1. 校验传入的File对象
    在方法开头添加非空判断,避免传入null触发异常:

    private void findPdf(File file) {
        if (file == null) {
            return;
        }
        // 后续业务逻辑
    }
    
  2. 处理listFiles()返回null的场景
    当目录无读取权限、非目录或系统无法获取目录内容时,listFiles()会返回null,必须提前拦截:

    if (file.isDirectory()) {
        File[] files = file.listFiles();
        if (files == null) {
            return;
        }
        for (File f : files) {
            findPdf(f);
        }
    }
    
  3. 校验文件有效性
    遍历前确认当前File对象存在且可读取:

    if (!file.exists() || !file.canRead()) {
        return;
    }
    
  4. 文件名非空校验
    若第63行是处理文件名的逻辑(如判断是否为PDF后缀),需确保文件名不为null:

    String fileName = file.getName();
    if (fileName == null || !fileName.toLowerCase().endsWith(".pdf")) {
        return;
    }
    

内容的提问来源于stack exchange,提问作者Sachin Bhujbal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:50:22