如何正确使用Kotlin Android的URL

我想用

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链接读取JSON? async函数的包不存在。

2 Solutions collect form web for “如何正确使用Kotlin Android的URL”

Android不允许从主线程访问互联网。 最简单的方法是在后台线程上打开URL。

像这样的东西:

 Executors.newSingleThreadExecutor().execute({ val json = URL("https://my-api-url.com/something").readText() simpleTextView.post { simpleTextView.text = json } }) 

不要忘记在Android Manifest文件中注册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" ... } 

协程很辉煌。

  • RxJava和Kotlin的花括号和正常括号有什么区别?
  • Kotlin Activity不包含在APK中
  • 科特林匕首不注射
  • 如何在Android Kotlin上抑制字符串常量的拼写检查?
  • 如何从Firebase中的表中同步获取所有行?
  • Android系统。 设置textSize所以它的高度匹配它的父布局高度的百分比 - 可能吗?
  • 如何访问kotlin中的数据列表数据
  • IncompatibleClassChangeError:类'java.lang.VirtualMachineError'没有实现接口'java.lang.CharSequence'
  • Kotlin - 在view.getTag()上的TypeCastException
  • @Name注释exception
  • 在kotlin android项目中使用intellij-markdown
  • Kotlin language will be the best programming language for Android.