android - 在 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
解决方案
推荐阅读
- javascript - Chart.js 无法在我的浏览器上运行
- c# - 在 Unity3D 游戏中控制广告之间的时间
- c# - 在 WPF 中绑定失败
- javascript - SQL 一次搜索多个 id - Node/Express
- vba - 引用下一行进行评估和索引匹配
- android - 有没有像 Apple 的“使用 Wi-Fi Calling 拨打电话”之类的应用程序,我可以在 Android 中制作一个应用程序,比如苹果的吗?
- python - 检索和使用 tkinter 组合框选择
- nuget - 无法在 NuGet 包中包含 .pdb 文件
- build - 支持文件名空间的简单构建系统?
- vba - 使用 vba 计算许多不同文件夹中的电子邮件以获取每周报告