javaでアプリ 作成をしています。
JSONを使い、APIを持ってきたいと思い
色々調べました結果、Kotlinを使用することが
一番簡潔で分かりやすくAPIで情報を持ってこれるということで
Kotlinを使用し始めました。
もともと作っていた文に
こちらの文をnewクラスで作成しました。
java
1 2MainActivity 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 18class MainActivity : AppCompatActivity() { 19 20 override fun onCreate(savedInstanceState: Bundle?) { 21 super.onCreate(savedInstanceState) 22 setContentView(R.layout.activity_main) 23 24 btn.**setOnClickListener** { 25 //ボタンがクリックされたらAPIを叩く。 26 HitAPITask().execute("https://api.bitflyer.jp/v1/getmarkets") 27 } 28 } 29 30 //後からここにinner classを作ります。 31 inner class HitAPITask: AsyncTask<String, String, String>(){ 32 33 override fun doInBackground(vararg params: String?): String? { 34 //ここでAPIを叩きます。バックグラウンドで処理する内容です。 35 var connection: HttpURLConnection? = null 36 var reader: BufferedReader? = null 37 val buffer: StringBuffer 38 39 try { 40 //param[0]にはAPIのURI(String)を入れます(後ほど)。 41 //AsynkTask<...>の一つめがStringな理由はURIをStringで指定するからです。 42 val url = URL(params[0]) 43 connection = url.openConnection() as HttpURLConnection 44 connection.connect() //ここで指定したAPIを叩いてみてます。 45 46 //ここから叩いたAPIから帰ってきたデータを使えるよう処理していきます。 47 48 //とりあえず取得した文字をbufferに。 49 val stream = connection.inputStream 50 reader = BufferedReader(InputStreamReader(stream)) 51 buffer = StringBuffer() 52 var line: String? 53 while (true) { 54 line = reader.readLine() 55 if (line == null) { 56 break 57 } 58 buffer.append(line) 59 //Log.d("CHECK", buffer.toString()) 60 } 61 62 //ここからは、今回はJSONなので、いわゆるJsonをParseする作業(Jsonの中の一つ一つのデータを取るような感じ)をしていきます。 63 64 //先ほどbufferに入れた、取得した文字列 65 val jsonText = buffer.toString() 66 67 val parentJsonObj = JSONArray(jsonText) 68 69 val parentJSONObject = parentJsonObj.getJSONObject(0) 70 71 val product_code: String = parentJSONObject.getString("product_code") // => Your Name. 72 73 return "$product_code" // => Your Name. - 2016 74 75 //ここから下は、接続エラーとかJSONのエラーとかで失敗した時にエラーを処理する為のものです。 76 } catch (e: MalformedURLException) { 77 e.printStackTrace() 78 } catch (e: IOException) { 79 e.printStackTrace() 80 } catch (e: JSONException) { 81 e.printStackTrace() 82 } 83 //finallyで接続を切断してあげましょう。 84 finally { 85 connection?.disconnect() 86 try { 87 reader?.close() 88 } catch (e: IOException) { 89 e.printStackTrace() 90 } 91 } 92 //失敗した時はnullやエラーコードなどを返しましょう。 93 return null 94 } 95 //返ってきたデータをビューに反映させる処理はonPostExecuteに書きます。これはメインスレッドです。 96 override fun onPostExecute(result: String?) { 97 super.onPostExecute(result) 98 if(result == null) return 99 100 textView.**text** = result 101 } 102 } 103}
webにあった例文を参照にしています。
太字にしてあります
kotlinx
、setOnClickListener
、text
で、エラーが出ています。
試しに、新規で作成したプロジェクトではエラーは出ませんでした。
なので、原因は元々作成していた方に何かあるのかな?と思っています。
java
1 2build.gradle 3 4apply plugin: 'com.android.application' 5apply plugin: 'kotlin-android' 6apply plugin: 'kotlin-android-extensions' 7 8android { 9 compileSdkVersion 27 10 defaultConfig { 11 applicationId "jp.aftech.myapplication" 12 minSdkVersion 21 13 targetSdkVersion 27 14 versionCode 1 15 versionName "1.0" 16 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 17 } 18 buildTypes { 19 release { 20 minifyEnabled false 21 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 22 } 23 } 24} 25 26dependencies { 27 implementation fileTree(dir: 'libs', include: ['*.jar']) 28 implementation 'com.android.support:appcompat-v7:27.1.1' 29 implementation 'com.android.support:design:27.1.1' 30 implementation 'com.android.support.constraint:constraint-layout:1.1.2' 31 implementation 'com.android.support:support-v4:27.1.1' 32 testImplementation 'junit:junit:4.12' 33 androidTestImplementation 'com.android.support.test:runner:1.0.2' 34 androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 35 compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 36 implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" 37 38} 39repositories { 40 mavenCentral() 41} 42 43
こちらも記載済みです。
解決方法をご存知の方、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/12 23:41
2018/07/13 02:59
2018/07/14 04:05
2018/07/14 05:13