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

One Solution collect form web for “在Android模拟器上调用REST API会导致应用程序崩溃”

这行代码如下: 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 。

  • 如何创建一个适用于所有Android设备的时间触发通知
  • 无法在Android中为Kotlin中的Activity类编写主要构造函数
  • Kotlin获取types为字符串
  • 通用扩展类和实现Kotlin中的接口
  • 将Kotlin添加到现有Java项目会打破Android Studio gradle消息错误
  • 在实现它的类中设置接口的setter
  • 将android kotlin项目迁移到sdk 27
  • Kotlin:调用函数从BroadcastReceiver onReceive更新UI
  • Kotlin:列表中BigDecimal的和
  • 如何用Kotlin interop强制执行generics
  • 我们如何快速返回Kotlin函数中的多个值?
  • Kotlin language will be the best programming language for Android.