转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118386817
本文出自【赵彦军的博客】

往期精彩文章

Android Coroutines Channels

Android Kotlin协程和Retrofit结合使用

Kotlin实战指南十六:Synchronized、Volatile

文章目录

  • Throws Exception
  • 自定义异常
  • runCatching
    • getOrDefault
    • isSuccess、isFailure
    • exceptionOrNull
    • getOrNull

Throws Exception

Kotlin 的异常和 Java 的一样, try…catch…finally代码块处理异常,唯一一点不同是:Kotlin 的异常都是 Unchecked exceptions。

checked exceptions 是必须在方法上定义并且处理的异常,比如 Java 的 IoException。

Kotlin 抛出异常是使用 Throws 注解来实现的,如下:

@Throws(IOException::class)
fun createDirectory(file: File) {if (file.exists())throw IOException("Directory already exists")file.createNewFile()
}

当我们在java代码中使用的时候,如下:

会提醒我们报错,但是如果在 kotlin 文件里使用的时候,就不会有提示。

自定义异常

/*** @author : zhaoyanjun* @time : 2021/7/5* @desc : 自定义异常*/
class CommonException(code: Int, message: String) : Exception(message)

使用:

@Throws(CommonException::class)
fun createDirectory(file: File) {if (file.exists())throw CommonException(0, "file is exists")file.createNewFile()
}

runCatching


class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)kotlin.runCatching {sum(2, 4)}.onSuccess {Log.d("yy--", "结果正常$it")}.onFailure {it.printStackTrace()Log.d("yy--", "结果异常${it.message}")}}fun sum(num1: Int, num2: Int): Int {1 / 0return num1 + num2}
}

getOrDefault

val result = kotlin.runCatching {sum(2, 4)}.onSuccess {Log.d("yy--", "结果正常$it")}.onFailure {it.printStackTrace()Log.d("yy--", "结果异常${it.message}")}.getOrDefault(100)//如果运行正常,就返回6,运行异常就返回100
Log.d("yy--", "结果$result")

isSuccess、isFailure

val result = kotlin.runCatching {sum(2, 4)}.onSuccess {Log.d("yy--", "结果正常$it")}.onFailure {it.printStackTrace()Log.d("yy--", "结果异常${it.message}")}.isFailure

exceptionOrNull

    public fun exceptionOrNull(): Throwable? =when (value) {is Failure -> value.exceptionelse -> null}

如果有异常就返回异常,否则返回 Null

getOrNull

    @InlineOnlypublic inline fun getOrNull(): T? =when {isFailure -> nullelse -> value as T}

如果失败了,就返回null ,否则正常返回

Android Kotlin Exception处理相关推荐

  1. Android Kotlin协程和Retrofit结合使用

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118085035 本文出自[赵彦军的博客] 往期精彩文章: Kotlin实战指南二十 ...

  2. Android Kotlin之Flow数据流

    文章目录 Flow介绍 使用举例 常用操作符 创建操作符 回调操作符 变换操作符 过滤操作符 组合操作符 功能性操作符 末端操作符 冷流 vs 热流 SharedFlow shareIn将普通flow ...

  3. Android Kotlin okhttp Retrofit 线程协程那些事

    这篇文章不是用来讲概念的, 只是用来谈论一些关于Android 进程\协程那些问题 1. android 子线程中的异常会引发crash闪退吗? 答案是会的 Thread{throw RuntimeE ...

  4. Android kotlin 大全

    Android kotlin 大全 前言 kotlin 学习目录 总结 前言 在学习之前,我们先来了解一下kotlin,在这里,我不会再去介绍kotlin 的发展史,我们直接来说一下我个人对于kotl ...

  5. Android Kotlin - 监听耳机的插入和拔出

    Android Kotlin - 监听耳机的插入和拔出 开发音乐应用时需要监听耳机的插入和拔出,用以调整音量或暂停播放. 采用注册广播的方式. 新建 HeadsetChangeReceiver 类 i ...

  6. android kotlin扩展添加域名

    android kotlin扩展添加域名? 你是否常为和系统方法变量起名冲突而烦恼? 你是否常为过多的方法名查找起来而而困惑? 你是否常为不知道谁写出的垃圾代码而头痛? 今天,给大家介绍一种添加域名的 ...

  7. Android kotlin run函数学习

    继续来看一下kotlin中run函数的应用,首先看一下源码: /*** Calls the specified function [block] and returns its result.** F ...

  8. Android: Kotlin 材料设计入门

    原文:Android: Kotlin 材料设计入门 作者:Joe Howard 译者:kmyhy 更新说明:本教程由 Joe Howard 升级为 Kotlin.原教程作者是 Megha Bambra ...

  9. Android Kotlin

    Android Kotlin 目录 一.什么是Android Kotlin? 二.为什么谷歌选择kotlin为Android开发官方语言? 三.Kotlin对新手开发者友好吗? 四.Kotlin有什么 ...

最新文章

  1. 对时间序列分类的LSTM全卷积网络的见解
  2. 微信小程序开发系列一:微信小程序的申请和开发环境的搭建
  3. Request.UrlReferrer详解
  4. win7下更改设置时间权限
  5. ACM入门之【树状数组习题】
  6. 将本地文件上传至Github【详细步骤】
  7. Linux基础(4)--用户与权限
  8. Kotlin 基本数据类型(五)
  9. 开源:Taurus.MVC 框架 (已支持.NET Core)
  10. 设计模式(1)单例模式(Singleton)
  11. 管理新语:软件工作考评的设计思路
  12. OpenLayers实例:打开ArcGIS Rest服务
  13. FireMonkey Control的Paint顺序
  14. 黑马畅购商城---9.Spring Security Oauth2 JWT授权
  15. 修改title旁边的小图标
  16. 手机充值业务python_小伙利用Python爆破某会员网站,充会员?不存在的!
  17. 关闭iOS上京东app不停询问“京东想从MF839粘贴”,您允许这样做吗? - 允许iphone应用访问剪切板
  18. 惠普刀片服务器型号,HP ProLiant刀片服务器简介
  19. 麻省理工学院的学生们愚弄了谷歌图像识别技术,计算机视觉算法仍然很容易被骗
  20. 在计算机领域中图形用户界面,带图形用户界面的计算机

热门文章

  1. linux乌邦图更改ip,Linux系统下图形界面更改IP地址分享
  2. 处理之后的图像句柄传到显示框_深度学习目标检测与预处理模块
  3. 手机cpu排行_鲁大师手机芯片排行榜:麒麟990第四,骁龙855第五!
  4. c语言实现辗除法,辗除法什么东西哦?
  5. 机器知道哪吒是部电影吗?解读阿里巴巴概念图谱AliCG
  6. 想快速发表CV/NLP论文?试试这几个方向!
  7. NAACL 2021 | QA-GNN:基于语言模型和知识图谱的问答推理
  8. 最新综述:多标签学习的新趋势
  9. 当深度学习遇上量化交易——公开信息篇
  10. 暑假没人带怎么办?还有我们为你推荐论文 | 本周值得读