Не удается ОПУБЛИКОВАТЬ необработанные данные JSON в Kotlin

#json #kotlin #post #nullpointerexception #raw-data

Вопрос:

Я новичок в Котлине, и мне нужно опубликовать массив объектов JSON в необработанном виде.

Код API:

 @Headers("Content-Type: application/x-www-form-urlencoded")
@POST("URLOfAPI")
fun dumpDataApi(@Body jsonBody: JsonArray): Call<APIResponse>
 

Класс ответа API:

 data class EnterDeviceDataResponse(
    val status: String
)
 

Вызов API:

 private fun dumpDataOnServer() {
    try {
        var deviceData = JSONArray()
        val jsonParser = JsonParser()
        for(dataPoint in dataPointsList!!)
        {
            var dataPointJSON = JSONObject();
            dataPointJSON.put("deviceUserName", "testing")
            dataPointJSON.put("timeStamp", dataPoint!!.timeStamp)
            dataPointJSON.put("latitude", dataPoint!!.latitude.toString())
            dataPointJSON.put("longitude", dataPoint!!.longitude.toString())
            dataPointJSON.put("altitude", dataPoint!!.altitude.toString())
            deviceData.put(dataPointJSON)
        }
        var requestBody = jsonParser.parse(deviceData.toString()) as JsonArray
        Log.e("dumpDataOnServer", requestBody.toString())

        val registerCall: Call<APIResponse> = RetrofitClient.apiService.dumpDataApi(requestBody)
        registerCall.enqueue(object: Callback<APIResponse> {
            override fun onResponse(
                registerCall: Call<APIResponse>,
                response: Response<APIResponse>
            ) {
                try {
                    if (response.isSuccessful) {
                        if (response.body()!!.status.isNotEmpty()) {
                            Log.e("APIResponse", response.body().toString())
                            Log.e(TAG, "Data dumped on Server. dataPointsList Size: "   dataPointsList!!.size)
                        } else {
                            Log.e("APIResponse", "Null")
                        }
                        Log.e("APIResponse", response.body().toString())
                    }
                } catch (e: Exception) {
                    e.printStackTrace()
                    try {
                        Log.e("APIResponse", e.toString())
                    } catch (e1: Resources.NotFoundException) {
                        e1.printStackTrace()
                        Log.e("APIResponse", e.toString())
                    }
                }
            }

            override fun onFailure(call: Call<APIResponse>, t: Throwable) {
                try {
                    Log.e("Tag", "error$t")
                    Log.e("APIResponse", t.toString())
                } catch (e: Resources.NotFoundException) {
                    e.printStackTrace()
                    Log.e("APIResponse", e.toString())
                }
            }
        })
    } catch (e: Resources.NotFoundException) {
        e.printStackTrace()
        Log.e("APIResponse", e.toString())
    }
}
 

requestBody выглядит нормально в соответствии с требованиями к вводу API:

 [{"deviceUserName":"testing","timeStamp":"07-05-2021 20:55:52","latitude":"0.0","longitude":"0.0","altitude":"0.0"},
{"deviceUserName":"testing","timeStamp":"07-05-2021 20:55:52","latitude":"33.5242907","longitude":"73.1483465","altitude":"416.96635813732104"},
{"deviceUserName":"testing","timeStamp":"07-05-2021 20:58:49","latitude":"0.0","longitude":"0.0","altitude":"0.0"}]
 

Но ответ выдает мне следующую ошибку:

 java.lang.NullPointerException: Attempt to invoke interface method 'int java.lang.CharSequence.length()' on a null object reference
 

У меня нет никакого предыдущего опыта работы в Kotlin. До сих пор я прочитал много ответов, но, к сожалению, я не могу разместить данные на сервере. Кто-нибудь, пожалуйста, объясните мне мою ошибку.