【发布时间】:2020-09-10 15:10:32
【问题描述】:
我正在 AsyncTask 中使用 Kotlin 的 URL.readText() 执行 HTTP GET 请求。我没有犯在 UI 线程中联网的常见错误,但我的应用仍然遇到崩溃。
如果我在关闭互联网的情况下启动我的应用程序或在运行期间关闭互联网,则下次我通过用户输入间接触发 GET 请求时它会崩溃。什么是执行“安全”GET 请求的好方法,例如只返回一个空字符串而不是崩溃?
我将每个调用分开到自己的行中,以确保它是 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) ...
}
用户界面线程:
MyTask(mMap, url).execute()
日志:
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
【问题讨论】:
-
AsyncTask已弃用。纯粹使用URL访问互联网是相当古老的。 OkHttp 将允许您避免这两种情况。但是,这些类型的 API 的工作方式具有相当内在的异常,因此请将您的 I/O 包装在try/catch块中。 -
仅供参考,在多个 StackOverflow 答案中都建议这样做
-
我会捕获什么异常类?
-
"我会捕获什么异常类?" ——我通常会抓住任何我能合理处理的东西。这可能只是
Exception,或者可能是Throwable(Exception的超类型)。 -
好吧,有道理,我猜奇怪的错误信息让我失望了
标签: android kotlin android-asynctask