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

时间:2017-06-25 23:33:26

标签: android rest api kotlin

我对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<String> = 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())
}
}
}

1 个答案:

答案 0 :(得分:2)

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

您可以阅读有关此例外here的更多信息。

另外,请确保AndroidManifest.xml

中包含以下内容:

<uses-permission android:name="android.permission.INTERNET" />

查看这些答案,了解有关如何在后台运行此内容的更多信息:

或者在Kotlin中,你也可以AnkoCoroutines