当我关闭 phone 的互联网时,Kotlin 的 URL.readText() 崩溃
Kotlin's URL.readText() crashes when I turn my phone's internet off
我正在 AsyncTask 中使用 Kotlin 的 URL.readText()
执行 HTTP GET 请求。我没有在 UI 线程中犯网络常见错误,但我的应用程序仍然崩溃。
如果我在关闭互联网的情况下启动我的应用程序或在运行期间关闭互联网,下次我通过用户输入间接触发 GET 请求时它会崩溃。执行 "safe" GET 请求的好方法是 returns 例如一个空字符串而不是崩溃?
我将每个调用分成单独的一行,以确保它是 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 关于捕获异常的建议对我有用,我认为 "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" }
我正在 AsyncTask 中使用 Kotlin 的 URL.readText()
执行 HTTP GET 请求。我没有在 UI 线程中犯网络常见错误,但我的应用程序仍然崩溃。
如果我在关闭互联网的情况下启动我的应用程序或在运行期间关闭互联网,下次我通过用户输入间接触发 GET 请求时它会崩溃。执行 "safe" GET 请求的好方法是 returns 例如一个空字符串而不是崩溃?
我将每个调用分成单独的一行,以确保它是 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 关于捕获异常的建议对我有用,我认为 "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" }