Обратите внимание, я только начинаю с Kotlin
У меня есть .NET API со стандартной готовой аутентификацией учетной записи для одного пользователя на основе токена .NET.
Предположим, что API работают отлично, так как все это было проверено как работающее с использованием Postman:
Следующий код работает, и это простой запрос StringRequest, выполненный в Volley:
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, мне нужно иметь возможность его проанализировать, но когда я преобразую вызов функции в JsonObjectRequest
, я получаю
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
Кто-нибудь может увидеть, что я делаю не так?