当前位置: 首页 > news >正文

android NullPointerException externalCacheDir

先看代码:

fun Context.getMyCacheDir(): String {return externalCacheDir!!.absolutePath + "/my_cache"
}

如上代码,在某些手机可能会出现crash。
原因详细阅读api,注意他有一个大大的注解Nullable:

    @Nullablepublic abstract File getExternalCacheDir();

api的内容描述最后一句为:
May return null if shared storage is not currently available.
如果共享存储不可用就是null。
Shared storage may not always be available, since removable media can be ejected by the user.
有些手机可能是可插拔的sdcard。
可以使用Environment.isExternalStorageEmulated()来检查。

那么, 简单来看,
getExternalCacheDir:
/storage/sdcard/Android/data/<应用包名>/cache
getCacheDir:
/data/data/<应用包名>/cache

同理:getExternalFilesDir与getFilesDir。

我们解决办法也轻轻松,因为cacheDir不可能不存在:

fun Context.getMyCacheDir(): String {return (externalCacheDir ?: cacheDir).absolutePath + "/my_cache"
}

题外话:
看android api,java代码需要注意注解Nullable, NotNull等。kotlin则语言级别自带。通过返回值或者参数的注解要求来处理自己的值。

http://www.lryc.cn/news/137532.html

相关文章:

  • 设计模式-过滤器模式(使用案例)
  • 成功解决修改已经push到远程git仓库的commit message
  • Ubuntu18.04 交叉编译openssl-1.1.1
  • 七夕学算法
  • 在C++中利用rapidjson实现Python中的字典(Dict)
  • 数组和指针练习(3)
  • 如何用树莓派Pico针对IoT编程?
  • 【填坑向】MySQL常见报错及处理系列(ERROR! The server quit without updating PID file)
  • 如何处理MySQL自增ID用完
  • Docker 安装教程【菜鸟级】
  • centos7.9 用docker安装mysql8.0
  • JVM和消息队列面经(自用)
  • 四、pikachu之文件包含
  • 【SVN内网穿透】远程访问Linux SVN服务
  • 没消费?复购难?不如试试即拼七人拼团模式
  • vscode+ros开发环境搭建
  • 10个最好的云GPU服务
  • 使用Nodejs搭建简单的HTTP服务器 - 内网穿透公网远程访问
  • Windows下搭建Tomcat HTTP服务,发布外网远程访问
  • 【Spring Boot】详解条件注解以及条件拓展注解@Conditional与@ConditionalOnXxx
  • Android 12 源码分析 —— 应用层 一(SystemUI准备篇)
  • 记录 MySQL 如何开启已有的定时任务
  • 三种生成树(STP,RSTP,MSTP)的基本配置(自我理解)
  • FRP内网穿透,配置本地电脑作为服务器
  • Linux基础指令
  • 基于GRU门控循环网络的时间序列预测matlab仿真,对比LSTM网络
  • windows上ffmpeg如何录制双屏幕中的一个屏幕上的视频
  • 使用Python搭建服务器公网展示本地电脑文件
  • Java IO流(五)Netty实战[TCP|Http|心跳检测|Websocket]
  • C#基础进阶