我正在使用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
@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" }