2017-06-25 22 views
0

私はアンドロイドスタジオが比較的新しいです。私はBittrexの交換APIを使用してcryptocurrenciesの価格を取得する非常に簡単なアプリケーションを構築しようとしています。しかし、URLから情報を取得しようとするたびに、私のアプリケーションがクラッシュします。私は途中でKotlinを使用しています。デバッグモードでエミュレータを実行する方法がわからないので、これを解決するのは難しいです。コンパイラだけです。ここに私のコードは次のとおりです。アンドロイドエミュレーターでREST APIを呼び出すと、アプリがクラッシュする

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

デバッガの使い方を学ぶことが優先事項です。その後、実際にAPIから戻ってくるものが得られているかどうかを確認できます。私はここで推測していますが、リスト[6]は範囲外だと思います。 – Mathemats

+0

私はIntelliJのコードを事前にテストしていましたので、うまくいきました。それはそうではないことを知っています – user8213376

答えて

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ではAnkoまたはCoroutinesとすることもできます。

+0

ありがとう、これはとても役に立ちました。 – user8213376

関連する問題