Залп - JsonObjectRequest - parseNetworkResponse () не вызывается - PullRequest
0 голосов
/ 10 октября 2019

Я хотел бы сохранить код ответа от вызовов залпа в БД, но похоже, что parseNetworkResponse () не вызывается. Любая идея, почему он ведет себя так?

Все мои вызовы - это GET, некоторые имеют код 500, а некоторые имеют код 200 с ответом json, поэтому я думаю, что он должен быть вызван.

private fun createCall(url: String, type: Int, data: JSONObject, callback: Int, request: DbRequestEntity) {
    val jsonRequest = object : JsonObjectRequest(type, url, data,
            Response.Listener { response ->
                Log.d(tag, "Response $response")
                try {
                    callback(response, data, callback, request)
                } catch (e: Exception) {
                    request.responseCode = 999
                    request.responseMessage = e.message
                    db.requestMoodel().update(request)
                    Log.d(tag, "API callback error $e ${e.localizedMessage} ${e.stackTrace}")
                }
            },
            Response.ErrorListener { error ->
                Log.d(tag, "API error $error")
                errorCallback(error, callback)
            }
    ) {
        val tag = "JsonObjectRequest"

        override fun getHeaders(): Map<String, String> {
            val headers = HashMap<String, String>()
            headers[ConstantsStorage.API_HEADER_CLIENT_ID] = ConstantsStorage.API_HEADER_CLIENT_ID_VALUE
            headers[ConstantsStorage.API_HEADER_CLIENT_CONTENT_TYPE] = ConstantsStorage.API_HEADER_CLIENT_CONTENT_TYPE_VALUE
            return headers
        }

        override fun parseNetworkResponse(response: NetworkResponse): Response<JSONObject> {
            Log.d(tag, "Response code = ${response.statusCode}")     //not getting this message to Logcat
            return super.parseNetworkResponse(response)
        }
    }
    queue.add(jsonRequest)
}

1 Ответ

0 голосов
/ 10 октября 2019

Замените функцию parseNetworkResponse следующим кодом

override fun parseNetworkResponse(response: NetworkResponse): Response<JSONObject> {
            try {
        if (response.data.length == 0) {
            byte[] responseData = "{}".getBytes("UTF8");
            response = new NetworkResponse(response.statusCode, responseData, response.headers, response.notModified);
        }
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
            return super.parseNetworkResponse(response)
        }
...