如何正确使用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" ... } 

协程很辉煌。

  • 在kotlin中使用意外的令牌(在同一行上使用;来分隔expression式)
  • 用Kotlin完成另一个Android的活动
  • 为什么我们编写NextActivity :: class.java,尽管这是一个kotlin类?
  • lateinit属性主持人还没有被EasyMVP,Robolectric和Kotlin初始化
  • Android工作室不解决在IDE中使用Kotlin(.kt)编写的类,但编译正常
  • kotlin中的“::”是什么意思?
  • kotlin中URLEncodedUtils.format(params,“utf-8”)的替代方法是什么?
  • 如何使用Tab布局与数据绑定库和Kotlin
  • 如何在数据模块中使用Android Kotlin Dagger 2和Firebase Auth?
  • 未解决的参考:数据绑定
  • Geofence不在Kotlin工作
  • Kotlin language will be the best programming language for Android.