Как получить заголовок и тело из StringRequest () Volley в Kotlin - PullRequest
0 голосов
/ 12 июня 2019

Чтобы получить просто тело в качестве ответа с StringRequest(), вы можете написать:

val stringRequest = StringRequest(Request.Method.GET, url,
        Response.Listener<String>  { response -> /*do something with the response*/ },
        Response.ErrorListener     { error -> /*do something with the error*/ }) 

Чтобы получить заголовок, вы должны переопределить parseNetworkResponse() следующим образом:

val stringRequest = StringRequest(Request.Method.GET, url,
        Response.Listener<String>{ response -> /*do something with the response*/ },
        Response.ErrorListener{ error -> /*do something with the error*/ }){
    override fun parseNetworkResponse(response:NetworkResponse): Response<String>{
        try{
           // returns some numbers, but not the body:
           val bodyString = getBody().toString()
           // returns some numbers as well:                                
           val responseString = super.parseNetworkResponse(response).toString() 

           // works fine, returns entire header:
           val header = response.headers
           // works fine, returns the header field value of "key":
           //val value = response.headers.get("key")        

           val all = header.toString() + bodyString  

           return (Response.success(all, HttpHeaderParser.parseCacheHeaders(response)))

        }catch (e: Exception){
           return Response.error(ParseError(e))
       }
    }
}

Однако, когда я переопределяю parseNetworkResponse(), отклик тела, похоже, исчезает, даже если я позвоню super.parseNetworkResponse() или getBody().

Я бы хотел получить заголовок и тело от одного StringRequest().

Как добавить заголовок в качестве объекта JSON к ответу на запрос JSON было описано здесь для Java: Получение заголовков из ответа в виде залпа

ВKotlin parseNetworkResponse() будет выглядеть так:

override fun parseNetworkResponse(response:NetworkResponse): Response<JSONObject>{
    try{
        val charsetString: String = HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET);
        val charset: Charset = charset(charsetString)
        val jsonString = String(response.data, charset)
        val jsonResponse = JSONObject(jsonString)
        jsonResponse.put("headers", JSONObject(response.headers))

        return Response.success(jsonResponse, HttpHeaderParser.parseCacheHeaders(response))

    }catch (e: JSONException){
        return Response.error(ParseError(e))
  }
}

, который работает нормально.

Итак, я полагаю, что и StringRequest () должно быть возможно получить и.

Что я делаю не так?

...