前提・実現したいこと
kotlinを使用しております
HttpsURLConnectionでWebAPIに接続し、最終的にJSONデータをTextViewに表示したいと考えております。
発生している問題・エラーコード
TextViewに、失敗したときに表示するよう設定したエラーコードが表示されてしまい上手く接続できておりません。
また、android studio の Logには赤字のエラーではありませんが、エラーメッセージがでております。
下記がログの内容になります。
2022-02-03 02:23:58.577 3461-3491/com.websarva.wings.android.httprequest W/System.err: java.io.FileNotFoundException: https://bookocr.cognitiveservices.azure.com/vision/v3.2/ocr?language=ja&detectOrientation=true&model-version=latest 2022-02-03 02:23:58.577 3461-3491/com.websarva.wings.android.httprequest W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:255) 2022-02-03 02:23:58.577 3461-3491/com.websarva.wings.android.httprequest W/System.err: at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:211) 2022-02-03 02:23:58.578 3461-3491/com.websarva.wings.android.httprequest W/System.err: at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:30) 2022-02-03 02:23:58.578 3461-3491/com.websarva.wings.android.httprequest W/System.err: at com.websarva.wings.android.httprequest.MainActivity$onCreate$1$visionTask$1.doInBackground(MainActivity.kt:74) 2022-02-03 02:23:58.578 3461-3491/com.websarva.wings.android.httprequest W/System.err: at com.websarva.wings.android.httprequest.MainActivity$onCreate$1$visionTask$1.doInBackground(MainActivity.kt:51) 2022-02-03 02:23:58.578 3461-3491/com.websarva.wings.android.httprequest W/System.err: at android.os.AsyncTask$3.call(AsyncTask.java:394) 2022-02-03 02:23:58.578 3461-3491/com.websarva.wings.android.httprequest W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266) 2022-02-03 02:23:58.578 3461-3491/com.websarva.wings.android.httprequest W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 2022-02-03 02:23:58.578 3461-3491/com.websarva.wings.android.httprequest W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 2022-02-03 02:23:58.578 3461-3491/com.websarva.wings.android.httprequest W/System.err: at java.lang.Thread.run(Thread.java:923)
該当のソースコード
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //viewを取得 val img_view = findViewById<ImageView>(R.id.img_view) val onYesClick = findViewById<Button>(R.id.onYesClick) val txt_result = findViewById<TextView>(R.id.textView) //画像を表示 val bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.sample) img_view.setImageBitmap(bitmap) //はいが押されたら onYesClick.setOnClickListener { //イメージをストリームに変換 val outputStream = ByteArrayOutputStream() bitmap?.compress(Bitmap.CompressFormat.JPEG, 100, outputStream) val Inputstream = outputStream.toByteArray() //非同期でAPIリクエストを宣言 val visionTask = object : AsyncTask<InputStream, String, String>(){ override fun doInBackground(vararg params: InputStream?): String { //APIを叩く(バックグラウンド処理) val url = URL("https://bookocr.cognitiveservices.azure.com/vision/v3.2/ocr?language=ja&detectOrientation=true&model-version=latest") var reader: BufferedReader? = null val buffer: StringBuffer var connection = url.openConnection() as HttpsURLConnection //HTTpsURLConnection try { connection.connectTimeout = 1000 connection.readTimeout = 1000 connection.useCaches = false connection.setRequestProperty("Content-Type", "application/octet-stream") connection.setRequestProperty( "****************", "value" )//apikey connection.requestMethod = "POST" connection.setFixedLengthStreamingMode(Inputstream.size) //APIを叩く connection.connect() //Bodyの書き込み val stream = connection.inputStream reader = BufferedReader(InputStreamReader(stream)) buffer = StringBuffer() var line: String? while (true) { line = reader.readLine() if (line == null) { break } buffer.append(line) Log.d("CHECK", buffer.toString()) } //Stringでreturn return buffer.toString() //エラーを処理 } catch (e: MalformedURLException) { e.printStackTrace() } catch (e: IOException) { e.printStackTrace() } catch (e: JSONException) { e.printStackTrace() } //finallyで接続を切断 finally { connection?.disconnect() try { reader?.close() } catch (e: IOException) { e.printStackTrace() } } //失敗した時のエラーコード return "error" }//doinBack //返ってきたデータをビューに反映させる処理 override fun onPostExecute(result: String?) { val textView =findViewById<TextView>(R.id.textView) super.onPostExecute(result) if(result == null) return textView.text = result } }//AsyncTask //タスクの起動 visionTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) } } } コード
コードの不備などがございましたらご指摘よろしくお願いいたします。
参考にさせていただいたサイトになります。
https://qiita.com/minme31/items/a9636cb0453524c64e67
あなたの回答
tips
プレビュー