如何在 Kotlin Android 中正确使用 URL
How to properly use the URL with Kotlin Android
我想用
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val json = URL("https://my-api-url.com/something").readText()
simpleTextView.setText(json)
}
但是发生了这个致命错误
FATAL EXCEPTION: main
Process: com.mypackage.randompackage, PID: 812
java.lang.RuntimeException: Unable to start activity ComponentInfo{ ***.MainActivity}: android.os.NetworkOnMainThreadException
如何简单地从 URL link 读取 JSON?
async
函数包不存在
Android 不允许从主线程访问互联网。
解决此问题的最简单方法是在后台线程上打开 URL。
像这样:
Executors.newSingleThreadExecutor().execute({
val json = URL("https://my-api-url.com/something").readText()
simpleTextView.post { simpleTextView.text = json }
})
不要忘记在 Android 清单文件中注册 Internet 权限。
您可以使用协程:
val json = async(UI) {
URL("https://my-api-url.com/something").readText()
}
记得给build.gradle添加协程:
kotlin {
experimental {
coroutines "enable"
}
}
...
dependencies {
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinx_coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_coroutines_version"
...
}
Coroutines 太棒了。
我想用
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val json = URL("https://my-api-url.com/something").readText()
simpleTextView.setText(json)
}
但是发生了这个致命错误
FATAL EXCEPTION: main
Process: com.mypackage.randompackage, PID: 812
java.lang.RuntimeException: Unable to start activity ComponentInfo{ ***.MainActivity}: android.os.NetworkOnMainThreadException
如何简单地从 URL link 读取 JSON?
async
函数包不存在
Android 不允许从主线程访问互联网。 解决此问题的最简单方法是在后台线程上打开 URL。
像这样:
Executors.newSingleThreadExecutor().execute({
val json = URL("https://my-api-url.com/something").readText()
simpleTextView.post { simpleTextView.text = json }
})
不要忘记在 Android 清单文件中注册 Internet 权限。
您可以使用协程:
val json = async(UI) {
URL("https://my-api-url.com/something").readText()
}
记得给build.gradle添加协程:
kotlin {
experimental {
coroutines "enable"
}
}
...
dependencies {
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinx_coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_coroutines_version"
...
}
Coroutines 太棒了。