Android Kotlin Exception处理

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代码中使用的时候,如下:
Android Kotlin Exception处理
文章图片

会提醒我们报错,但是如果在 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 / 0 return 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.exception else -> null }

【Android Kotlin Exception处理】如果有异常就返回异常,否则返回 Null
getOrNull
@InlineOnly public inline fun getOrNull(): T? = when { isFailure -> null else -> value as T }```` 如果失败了,就返回null ,否则正常返回

    推荐阅读