2017-06-25 4 views
0

Ich bin relativ neu in Android Studio. Ich versuche eine sehr einfache App zu erstellen, die den Preis von Kryptowährungen mithilfe der Bittrex-Austausch-API abruft. Jedes Mal, wenn ich versuche, die Informationen von der URL abzurufen, stürzt meine App ab. Ich benutze übrigens Kotlin. Ich habe Probleme, das zu lösen, weil ich nicht weiß, wie man den Emulator im Debug-Modus ausführt, nur den Compiler. Hier ist mein Code:Aufruf REST API auf Android-Emulator verursacht App zum Absturz

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()) 
} 
} 
} 
+3

Lernen, wie man den Debugger benutzt, hat Priorität. Dann können Sie überprüfen, ob Sie wirklich das bekommen, was Sie von der API erwarten. Ich denke hier, aber ich denke, dass Liste [6] außerhalb der Grenzen liegt. – Mathemats

+0

Ich habe vorher den Code in IntelliJ getestet und es hat funktioniert, also weiß ich, dass es nicht – user8213376

Antwort

2

Diese Zeile hier: val result = URL("https://bittrex.com/api/v1.1/public/getticker?market=" + market).readText() sieht aus wie es auf dem Haupt-Thread ausgeführt wird. Dies wird dazu führen, dass die App mit einem NetworkOnMainThreadException abstürzt.

Sie können mehr über diese Ausnahme lesen here.

Stellen Sie außerdem sicher, dass Sie in Ihrem AndroidManifest.xml folgendes haben:

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

Schauen Sie sich diese Antworten für weitere Informationen darüber, wie dies im Hintergrund laufen zu lassen:

Alternativ können Sie in Kotlin auch Anko oder Coroutines.

+0

ist Vielen Dank, das war sehr hilfreich. – user8213376

Verwandte Themen