Volley StringRequest работает, но изменение его на JsonObjectRequest приводит к com.android.volley.ClientError - PullRequest
0 голосов
/ 21 мая 2019

Обратите внимание, я только начинаю с Kotlin

У меня есть .NET API со стандартной готовой аутентификацией учетной записи для одного пользователя на основе токена .NET.

Предположим, что API работают отлично, так как все это было проверено как работающее с использованием Postman:

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)

Проверка работоспособности вышеуказанного кода:

ADB shell

Но, разумеется, учитывая, что это получает 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

JsonBodyRequest Results

Кто-нибудь может увидеть, что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...