Я пытаюсь преобразовать строку JSON в объект класса данных JSON.Компилятор не жалуется, в Android Studio 3 IDE предусмотрены необходимые подсказки для исправления кода.Тем не менее я получаю сообщение об ошибке выполнения, в котором говорится, что JSONObject не может быть приведен.Пожалуйста, любые подсказки ...
У меня есть следующий код:
fun startReplay() {
doAsync {
triggerServerFile(eventDomain + "/get-replay-JSON.php")
val jsonString = getServerFile(eventDomain + "/data/replay-SidR2018.json?nocache=" + Math.random())
uiThread {
var replayData:replayDataObject = JSONObject(jsonString) as replayDataObject
val a= replayData.component1()
val b= replayData.component2()[3].component3()
}
}
}
и следующие классы данных:
data class replayDataObject(
val event: String,
val shiptracks: List<Shiptrack>,
val windtracks: List<Windtrack>
)
data class Shiptrack(
val colorcode: String,
val course: List<String>,
val lat: List<String>,
val lon: List<String>,
val name: String,
val speed: List<String>,
val stamp: List<String>
)
data class Windtrack(
val course: List<String>,
val lat: List<String>,
val lon: List<String>,
val name: String,
val speed: List<String>,
val stamp: List<String>
)
и, наконец, следующая строка JSON:
{
"event": "SidR2018,Slag in de Rondte 2018",
"shiptracks": [{
"name": "Hollandia",
"colorcode": "0",
"stamp": ["1541407570", "1541407599"],
"lat": ["53.173461666667", "53.17347"],
"lon": ["5.409655", "5.409655"],
"speed": ["0", "0"],
"course": ["299", "301"]
}, {
"name": "Ouderzorg",
"colorcode": "14",
"stamp": ["1541407540", "1541407540", "1541407540"],
"lat": ["53.17359", "53.17359", "53.17359"],
"lon": ["5.409586", "5.409586", "5.409586"],
"speed": ["0", "0", "0"],
"course": ["0", "0", "0"]
}
],
"windtracks": [{
"name": "Arcen",
"stamp": ["1541409000", "1541411400"],
"lat": ["51.5", "51.5"],
"lon": ["6.2", "6.2"],
"speed": ["4", "2"],
"course": ["72", "61"]
}, {
"name": "Zeeplatform K13",
"stamp": ["1541408400", "1541410800", "1541412000", "1541414400"],
"lat": ["53.22", "53.22", "53.22", "53.22"],
"lon": ["3.22", "3.22", "3.22", "3.22"],
"speed": ["16", "16", "17", "16"],
"course": ["126", "129", "127", "120"]
}
]
}
Трассировка стека (строка 381 - это строка в коде, содержащая JSOBObject: E / AndroidRuntime: FATAL EXCEPTION: main Процесс: nl.zeilvaartwarmond.ttandroid.szwtracktrace, PID: 23370 java.lang.ClassCastException:org.json.JSONObject не может быть приведен к nl.zeilvaartwarmond.ttandroid.szwtracktrace.MapsActivity $ replayDataObject по адресу nl.zeilvaartwarmond.ttandroid.szwtracktrace.MapsActivity $ startReplay $ 1 $ 1.inart.tv. att.szwtracktrace.MapsActivity $ startReplay $ 1 $ 1.invoke (MapsActivity.kt: 44) в org.jetbrains.anko.AsyncKt $ uiThread $ 1.run (Async.kt: 70) в android.os.Handler.handleCallback (Handler.java:898)) на android.os.Handler.dispatchMessage (Handler.java:107) на android.os.Looper.loop (Looper.java:198) на android.app.ActivityThread.main (ActivityThread.java:6716) на java.lang,refle.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:493) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)