android - Volley StringRequest 有效,但将其更改为 JsonObjectRequest 会导致 com.android.volley.ClientError
问题描述
请注意,我刚刚开始使用 Kotlin
我有一个 .NET API,它设置了标准的开箱即用的基于 .NET 令牌的单用户帐户身份验证。
假设 API 运行良好,因为所有这些都已被验证为使用 Postman 工作:
以下代码正在运行,它是在 Volley 中完成的简单 StringRequest:
val registerRequest = object : StringRequest(Method.POST, TOKEN_URL, Response.Listener { response ->
Log.i("SmackChatAPI", response)
var tokenresponse = ""
token(tokenresponse)
}, Response.ErrorListener { response ->
Log.i("SmackChatAPI", "Something went wrong")
Log.i("SmackChatAPI", response.toString())
token("")
}){
override fun getHeaders(): MutableMap<String, String> {
var map : MutableMap<String, String> = mutableMapOf<String, String>()
//map.put("Content-Type", "application/x-www-form-urlencoded")
return map
}
override fun getBodyContentType(): String {
return "application/x-www-form-urlencoded charset=utf-8"
//return "application/json; charset=utf-8"
}
override fun getParams(): MutableMap<String, String> {
var map : MutableMap<String, String> = mutableMapOf<String, String>()
map.put("grant_type","password")
map.put("username",username)
map.put("password",password)
return map
}
}
Log.i("SmackChatAPI", "API called")
Volley.newRequestQueue(context).add(registerRequest)
验证上述代码是否正常工作:
但是很自然,看到这是接收 JSON,我需要能够解析它,但是第二次我将函数调用转换为 aJsonObjectRequest
我得到了
com.android.volley.ClientError
这是同一 API 的故障代码:
val registerRequest = object : JsonObjectRequest(Method.POST, TOKEN_URL, null, Response.Listener { response ->
var tokenresponse = response.getString("access_token")
token(tokenresponse)
}, Response.ErrorListener { response ->
Log.i("SmackChatAPI", "Something went wrong")
Log.i("SmackChatAPI", response.toString())
token("")
}){
override fun getHeaders(): MutableMap<String, String> {
var map : MutableMap<String, String> = mutableMapOf<String, String>()
//map.put("Content-Type", "application/x-www-form-urlencoded")
return map
}
override fun getBodyContentType(): String {
return "application/x-www-form-urlencoded charset=utf-8"
//return "application/json; charset=utf-8"
}
override fun getParams(): MutableMap<String, String> {
var map : MutableMap<String, String> = mutableMapOf<String, String>()
map.put("grant_type","password")
map.put("username",username)
map.put("password",password)
return map
}
}
Log.i("SmackChatAPI", "API called")
Volley.newRequestQueue(context).add(registerRequest)
正如你所看到的,所有改变的是我现在使用的是JsonBodyRequest
谁能看到我做错了什么?
解决方案
推荐阅读
- python - Ploltly express scatterplot 不允许对分类标签进行排序
- kotlin - 从 JWT 中的服务器获取响应
- python - python tkinter中的移动图像
- r - 使用国家代码包将大陆/地区列添加到数据框
- typescript - 如何有效地处理接口中的对象与数组
- java - 我在java中练习插入排序,但是当我在内部循环中用++j替换j+1时,它就卡在那里了
- .net - 什么是软件工程中的可扩展设计?
- javascript - 将范围作为全局变量返回 Google 表格脚本
- google-sheets - 谷歌表格功能
- websocket - 基于 HTTP/2 的 WebSockets 和 GOAWAY