Отправка JSON и заголовка в REST API KOTLIN - PullRequest
1 голос
/ 24 июня 2019

Я нашел видео на YouTube о том, как получить URL-адрес, но мне нужно сделать сообщение в API REST. Я не уверен, как это сделать.

Я пытался осмотреться здесь, но большая часть этого - Java.

fun fetchJson() {
    println ("attempting to fetch JSON")

    val url = "https://utgapi.shift4test.com/api/rest/v1/transactions/sale"

    val request = Request.Builder().url(url).build()

    val client = OkHttpClient()
    client.newCall(request).enqueue(object: Callback {
        override fun onResponse(call: Call?, response: Response?) {
            val body = response?.body()?.string()
            println(body)
            println("try and get json api working there was an error")
        }

        override fun onFailure(call: Call, e: IOException) {
            println("failed to execute request")
}

с GET, я просто получаю сообщение об ошибке, потому что я не выполняю запрос POST.

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Если вы используете OkHttp, вы можете проверить этот код

fun POST(url: String, parameters: HashMap<String, String>, callback: Callback): Call {
    val builder = FormBody.Builder()
    val it = parameters.entries.iterator()
    while (it.hasNext()) {
        val pair = it.next() as Map.Entry<*, *>
        builder.add(pair.key.toString(), pair.value.toString())
    }

    val formBody = builder.build()
    val request = Request.Builder()
            .url(url)
            .post(formBody)
            .build()


    val call = client.newCall(request)
    call.enqueue(callback)
    return call
}
0 голосов
/ 24 июня 2019

Нашел что-то здесь https://stackoverflow.com/a/29795501/5182150 Преобразование этого в kotlin было бы похоже на

private val client = OkHttpClient();

 fun run() throws Exception {
val formBody = FormEncodingBuilder()
    .add("search", "Jurassic Park")
    .build() as RequestBody;
val request = new Request.Builder()
    .url("https://en.wikipedia.org/w/index.php")
    .post(formBody)
    .build();

val response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

System.out.println(response.body().string());
}

Это должно быть суть.Вы можете иметь дело с обнуляемыми проблемами, поскольку студия предупреждает вас.Другой совет: вы также можете использовать Retrofit, которая работает с помощью OkHTTP для сетевых вызовов.Вы можете найти больше информации о модернизации здесь https://square.github.io/retrofit/ и хороший учебник здесь https://medium.com/@prakash_pun/retrofit-a-simple-android-tutorial-48437e4e5a23

...