当我关闭手机网络时,Kotlin的URL.readText()会崩溃。

问题描述 投票:1回答:1

我正在使用Kotlin的 URL.readText() 在...中 AsyncTask. 我在UI线中没有犯联网的常见错误,然而我的app还是会遇到崩溃。

如果我在操作过程中关闭网络启动我的应用,或者关闭网络,那么下一次我间接触发用户输入的GET请求时,就会崩溃。有什么好的方法可以做一个 "安全 "的GET请求,比如只返回一个空的String,而不是崩溃?

我把每个调用都分开到自己的行中,以确保它是 readText() 导致崩溃,而不是例如我也使用的GoogleMap。我还检查了URL对象,它不是空的。该应用程序没有请求任何权限。


任务。

class MyTask(map : GoogleMap, url : String) : AsyncTask<Void, Void, String>() {
    val mMap = map;
    val mURL = url;

    override fun doInBackground(vararg params: Void?): String {
        return URL(mURL).readText()
    }

    ... (more code) ...
}

UI线程:

MyTask(mMap, url).execute()

日志。

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
android kotlin android-asynctask
1个回答
1
投票

@CommonsWare的捕捉Exception的建议对我有用,我以为 "fatal "是指不能捕捉。

override fun doInBackground(vararg params: Void?): String {
    return try {
        URL(mURL).readText()
    } catch (ex : Exception) {
        "null"
    }
}

甚至更短。

override fun doInBackground(vararg params: Void?): String =
    try { URL(mURL).readText() } catch (ex : Exception) { "null" }
© www.soinside.com 2019 - 2024. All rights reserved.