JSONを送信してから結果のJSONを受け取るという処理をKotlinで書いています。
APIの方には特に問題がないはずなのですが、エラーを返され、アプリがクラッシュしてしまいます。
POSTの書き方が間違っているのか、それともAPIの方に問題があることを疑ったほうがいいのか、アドバイスをくださるとうれしいです。
以下のようにPOSTリクエストの処理を書いています。
kotlin
1fun request() { 2 val map: MutableMap<String,Any> = mutableMapOf("data1" to "example", "data2" to 0) 3 val jsonStr = Gson().toJson(map) 4 5 Thread { 6 val url = "http://xxxxxxxxxxxxxx.json" 7 response = HttpConnection().post(url,jsonStr) 8 }.start() 9} 10 11public class HttpConnection { 12 13 14 fun post(uri: String, json: String): String { 15 var buffer = "" 16 var con: HttpURLConnection? = null 17 val url = URL(uri) 18 try { 19 con = url.openConnection() as HttpURLConnection 20 con.requestMethod = "POST" 21 con.instanceFollowRedirects = false 22 con.setRequestProperty("Accept", "application/json") 23 con.doOutput = true 24 con.setRequestProperty("Content-Type", "application/json; charset=utf-8") 25 val os = con.outputStream 26 val ps = PrintStream(os) 27 ps.print(json) 28 ps.close() 29 30 val reader = BufferedReader(InputStreamReader(con.inputStream, "UTF-8")) 31 var line = reader.readLine() 32 while (line != null) { 33 buffer += line 34 line = reader.readLine() 35 } 36 reader.close() 37 }catch (e: java.lang.Exception){ 38 Log.e("エラーが起きました",e.toString()) 39 } 40 con?.disconnect() 41 return buffer 42 } 43}
また上記のpost()の箇所は、以下のように書いていたものを修正したものです。どちらも同様のエラーが出ています。
kotlin
1 fun post(url: String, json: String) : String { 2 var responce = "" 3 val con = URL(url).openConnection() as HttpURLConnection 4 con.requestMethod = "POST" 5 con.doInput = true 6 con.doOutput = true 7 con.setRequestProperty("Content-Type", "application/json") 8 con.setRequestProperty("Accept", "application/json") 9 con.instanceFollowRedirects = false 10 var resReader: BufferedReader? = null 11 try { 12 val os = con.outputStream 13 val ps = PrintStream(os) 14 ps.print(json) 15 ps.close() 16 resReader = BufferedReader(InputStreamReader(con.inputStream)) 17 con.connect() 18 con.responseCode 19 var line = resReader.readLine() 20 while (line != null){ 21 responce += line 22 line = resReader.readLine() 23 } 24 }catch (e: Exception) { 25 Log.e("エラーが起きました",e.toString()) 26 }finally { 27 con.disconnect() 28 resReader?.close() 29 } 30 return responce 31 }
そして発生したエラーが以下のようなものです。
logcat
1 2E/エラーが起きました: java.io.FileNotFoundException: http://xxxxxxxxxxxxxx.json 3D/AndroidRuntime: Shutting down VM 4E/AndroidRuntime: FATAL EXCEPTION: main 5 Process: jp.co.xxxxxxx.xxxxxx, PID: 9508 6 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 7 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:503) 8 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 9 Caused by: java.lang.reflect.InvocationTargetException 10 at java.lang.reflect.Method.invoke(Native Method) 11 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 12 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 13 Caused by: org.json.JSONException: End of input at character 0 of 14 15
かなりの間このエラーに手を焼いております。ヒントになるような知見をどなたかお持ちでしたら、ご教示頂けると幸いです。宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー