在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 。

  • Retrofit2 + Kotlin中的SimpleXML:MethodException:注释必须标记一个set或get方法
  • 锁定Kotlin中的serialVersionUID
  • 将android hashmap转换为kotlin
  • Kotlin递归
  • 退货和内联
  • 在Kotlin Android中将数据添加到RecyclerView
  • Android的测试在领域的kotlin
  • 在kotlin中,如何使主构造函数的setter属性为private?
  • RecyclerView在另一个RecyclerView(Mvvm + Databinding + Kotlin)
  • android studio如何将java转换为kotlin文件
  • Kotlin中参数化类的类字面语法
  • Kotlin language will be the best programming language for Android.