Search code examples
androidjsonkotlinkotlin-android-extensionskotlin-extension

How to properly use the URL with Kotlin Android


I want to use

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)
}

but this fatal error occurs

FATAL EXCEPTION: main
    Process: com.mypackage.randompackage, PID: 812
    java.lang.RuntimeException: Unable to start activity ComponentInfo{ ***.MainActivity}: android.os.NetworkOnMainThreadException

How can I simply read a JSON from a URL link? The package of the async function doesn't exist.


Solution

  • Android doesn't allow accessing the internet from the main thread. The simplest way around this would be to open the URL on a background thread.

    Something like this:

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

    Don't forget to register Internet permission in the Android Manifest file.