将 Json 和 header 发布到 REST api KOTLIN

Posting a Json and a header to an REST api KOTLIN

我找到了一个关于如何获取 url 的 YouTube 视频,但我需要对 REST api 执行 post。我不确定该怎么做。

我试着在这里四处看看,但大部分都是 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 请求。

在这里找到了一些东西 将其转换为 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/ and a good tutorial here https://medium.com/@prakash_pun/retrofit-a-simple-android-tutorial-48437e4e5a23

如果您使用的是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
}