fix FileNotFoundException when response code is 4xx or 5xx

master
stevenzack 4 years ago committed by Kevin Wan
parent b65fcc5512
commit 701208b6f4

@ -26,9 +26,9 @@ import java.net.URL
const val SERVER = "http://localhost:8080" const val SERVER = "http://localhost:8080"
suspend fun apiRequest( suspend fun apiRequest(
method:String, method: String,
uri: String, uri: String,
body: Any="", body: Any = "",
onOk: ((String) -> Unit)? = null, onOk: ((String) -> Unit)? = null,
onFail: ((String) -> Unit)? = null, onFail: ((String) -> Unit)? = null,
eventually: (() -> Unit)? = null eventually: (() -> Unit)? = null
@ -36,7 +36,10 @@ suspend fun apiRequest(
val url = URL(SERVER + uri) val url = URL(SERVER + uri)
with(url.openConnection() as HttpURLConnection) { with(url.openConnection() as HttpURLConnection) {
requestMethod = method requestMethod = method
headerFields["Content-Type"] = listOf("Application/json") doInput = true
if (method == "POST" || method == "PUT") {
setRequestProperty("Content-Type", "application/json")
doOutput = true
val data = when (body) { val data = when (body) {
is String -> { is String -> {
body body
@ -48,15 +51,18 @@ suspend fun apiRequest(
val wr = OutputStreamWriter(outputStream) val wr = OutputStreamWriter(outputStream)
wr.write(data) wr.write(data)
wr.flush() wr.flush()
}
if (responseCode >= 400) {
BufferedReader(InputStreamReader(errorStream)).use {
val response = it.readText()
onFail?.invoke(response)
}
return@with
}
//response //response
BufferedReader(InputStreamReader(inputStream)).use { BufferedReader(InputStreamReader(inputStream)).use {
val response = it.readText() val response = it.readText()
if (responseCode == 200) {
onOk?.invoke(response) onOk?.invoke(response)
} else {
onFail?.invoke(response)
}
} }
} }
eventually?.invoke() eventually?.invoke()

Loading…
Cancel
Save