在Android模拟器上调用REST API会导致应用程序崩溃

我对android studio比较陌生。 我正尝试构建一个非常简单的应用程序,使用Bittrex交换API获取加密货币的价格。 然而,每次我尝试从URL获取信息,我的应用程序崩溃。 顺便说一句,我正在使用Kotlin。 我有麻烦解决这个问题,因为我不知道如何在调试模式下运行模拟器,只是编译器。 这是我的代码:

package com.example.sebastian.cryptoapp import android.support.v7.app.AppCompatActivity import android.os.Bundle import java.net.URL import java.net.MalformedURLException import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { fun search(): String { //read in value var market = searchBar.getText().toString() //output text from URL query val result = URL("https://bittrex.com/api/v1.1/public/getticker?market=" + market).readText() return result } fun getPrice(): String { //calling search function var info = search() //split the string into a list var list: List = info.split(":", "}") //access 7th index of list for last traded price return list[6] } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener { text_output.setText(getPrice()) } } } 

这行代码如下: val result = URL("https://bittrex.com/api/v1.1/public/getticker?market=" + market).readText()看起来像是在主线程上运行。 这将导致应用程序崩溃与NetworkOnMainThreadException

你可以在这里阅读更多关于这个例外。

另外,请确保在AndroidManifest.xml有以下内容:

查看这些答案以获得更多关于如何在后台运行的信息:

  • 如何解决android.os.NetworkOnMainThreadException?
  • Android – android.os.NetworkOnMainThreadException

另外在Kotlin你也可以使用Anko或Coroutines 。