#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. До сих пор я прочитал много ответов, но, к сожалению, я не могу разместить данные на сервере. Кто-нибудь, пожалуйста, объясните мне мою ошибку.