首页 > 解决方案 > 在 Android 中编写响应正文的正确方法是什么?

问题描述

我正在使用以下函数在 kotlin 中发出 POST 请求。

fun makeRequest(url: String, body: String): String{
        var builder = StringBuilder()
        val connection = URL(url).openConnection() as HttpURLConnection
        connection.setDoOutput(true)
        connection.setChunkedStreamingMode(0)
        connection.requestMethod = "POST"
        connection.setRequestProperty("Content-Type", "application/json; charset=utf-8")

        val jsonbody = Gson().toJson(body)
        val wr = OutputStreamWriter(connection.outputStream, "utf-8")
        wr.write(jsonbody)
        wr.flush()

        try{
            var data: Int = connection.inputStream.read()
            while (data != -1) {
                builder.append(data.toChar())
                data = connection.inputStream.read()
            }
        }catch(e: Exception){
            builder = StringBuilder()
            builder.append(connection.responseMessage)
        }finally {
            wr.close()
            connection.disconnect()
        }
        return builder.toString()
    }

在我的片段中,我有一个 onClickListener 按钮,如下所示:

signInButton.setOnClickListener {
                val acc = userAccountTextField.text.toString()
                val pw = userPasswordTextField.text.toString()

                val body = """{"username":$acc,"password":$pw}"""
                CoroutineScope(Dispatchers.IO).launch{
                    val output = makeRequest( getString(R.string.url)+"user/login" , body)
                    Snackbar.make( view , output, Snackbar.LENGTH_SHORT).show()
                }
            }

我可以向我的本地主机发出请求,但是,它没有检测到请求正文并返回 400 错误。编写响应正文的正确方法是什么?是我传递给方法的字符串还是 outputstreamwriter 的问题?

我也在我的sailsjs项目中发现了这个错误,所以我假设我编写json的方式有问题?

error: Unable to parse HTTP body- error occurred :: 'SyntaxError: Unexpected token # in JSON at position 0\n' +
  '    at JSON.parse (<anonymous>)\n' +
  '    at createStrictSyntaxError

恩格罗克

标签: androidkotlin

解决方案


推荐阅读