webで拾った一例です。
クリックアクションは必要なく、そのままAPIで引っ張ってきた文字や写真を表示したいのですが
この点どのように変更すればできますでしょうか?
btn.setOnClickListenerが
クリックされたらAPIを叩くとしているのはわかります。
java
1 2MainActivity.java 3 4import android.os.AsyncTask 5import android.support.v7.app.AppCompatActivity 6import android.os.Bundle 7import kotlinx.android.synthetic.main.activity_main.* 8import org.json.JSONArray 9import org.json.JSONException 10import org.json.JSONObject 11import java.io.BufferedReader 12import java.io.IOException 13import java.io.InputStreamReader 14import java.net.HttpURLConnection 15import java.net.MalformedURLException 16import java.net.URL 17 18 19class MainActivity : AppCompatActivity() { 20 21 override fun onCreate(savedInstanceState: Bundle?) { 22 super.onCreate(savedInstanceState) 23 setContentView(R.layout.activity_main) 24 25 btn.setOnClickListener { 26 //ボタンがクリックされたらAPIを叩く。 27 HitAPITask().execute("https://api.bitflyer.jp/v1/getmarkets") 28 } 29 } 30 31 //後からここにinner classを作ります。 32 inner class HitAPITask: AsyncTask<String, String, String>(){ 33 34 override fun doInBackground(vararg params: String?): String? { 35 //ここでAPIを叩きます。バックグラウンドで処理する内容です。 36 var connection: HttpURLConnection? = null 37 var reader: BufferedReader? = null 38 val buffer: StringBuffer 39 40 try { 41 //param[0]にはAPIのURI(String)を入れます(後ほど)。 42 //AsynkTask<...>の一つめがStringな理由はURIをStringで指定するからです。 43 val url = URL(params[0]) 44 connection = url.openConnection() as HttpURLConnection 45 connection.connect() //ここで指定したAPIを叩いてみてます。 46 47 //ここから叩いたAPIから帰ってきたデータを使えるよう処理していきます。 48 49 //とりあえず取得した文字をbufferに。 50 val stream = connection.inputStream 51 reader = BufferedReader(InputStreamReader(stream)) 52 buffer = StringBuffer() 53 var line: String? 54 while (true) { 55 line = reader.readLine() 56 if (line == null) { 57 break 58 } 59 buffer.append(line) 60 //Log.d("CHECK", buffer.toString()) 61 } 62 63 //ここからは、今回はJSONなので、いわゆるJsonをParseする作業(Jsonの中の一つ一つのデータを取るような感じ)をしていきます。 64 65 //先ほどbufferに入れた、取得した文字列 66 val jsonText = buffer.toString() 67 68 //JSONObjectを使って、まず全体のJSONArrayを取ります。 69 val parentJsonObj = JSONArray(jsonText) 70 71 //今回のJSONは配列になっているので(データは一つですが)、全体のJSONObjectから、getJSONObjで配列0番目の"BTC/JPY"を取ります。 72 val parentJSONObject = parentJsonObj.getJSONObject(0) 73 74 //Product_codeのデータのtitle項目をStringで取ります。これで中身を取れました。 75 val product_code: String = parentJSONObject.getString("product_code") // => Your Name. 76 77 //product_codeでreturnしてあげましょう。 78 return "$product_code" // => Your Name. - 2016 79 80 //ここから下は、接続エラーとかJSONのエラーとかで失敗した時にエラーを処理する為のものです。 81 } catch (e: MalformedURLException) { 82 e.printStackTrace() 83 } catch (e: IOException) { 84 e.printStackTrace() 85 } catch (e: JSONException) { 86 e.printStackTrace() 87 } 88 //finallyで接続を切断してあげましょう。 89 finally { 90 connection?.disconnect() 91 try { 92 reader?.close() 93 } catch (e: IOException) { 94 e.printStackTrace() 95 } 96 } 97 //失敗した時はnullやエラーコードなどを返しましょう。 98 return null 99 } 100 //返ってきたデータをビューに反映させる処理はonPostExecuteに書きます。これはメインスレッドです。 101 override fun onPostExecute(result: String?) { 102 super.onPostExecute(result) 103 if(result == null) return 104 105 textView.text = result 106 } 107 } 108}
レスポンス [ { "product_code": "BTC_JPY" }, { "product_code": "FX_BTC_JPY" }, { "product_code": "ETH_BTC" }, { "product_code": "BTCJPY28APR2017", "alias": "BTCJPY_MAT1WK" }, { "product_code": "BTCJPY05MAY2017", "alias": "BTCJPY_MAT2WK" } ]
全体像はこうなっております。
OnClickListenerを消すと
その直後のinner
にエラーが出てしまいます。。
(Modifier 'liner' is not applicable inside 'file')
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/16 01:32