Json Kotlin klaxon解析谷歌方向Api
对不起我的英语(谷歌翻译)。 我试图用Kotlin上的klaxon()从google directions的答案中得到两点之间的距离Json Kotlin klaxon解析谷歌方向Api,json,kotlin,google-directions-api,klaxon,Json,Kotlin,Google Directions Api,Klaxon,对不起我的英语(谷歌翻译)。 我试图用Kotlin上的klaxon()从google directions的答案中得到两点之间的距离 fun distanceDier (start: LatLng, end: LatLng, mode: String) { val url = ("http://maps.googleapis.com/maps/api/directions/json?" + "origin=" + start.latitude + "," + s
fun distanceDier (start: LatLng, end: LatLng, mode: String) {
val url = ("http://maps.googleapis.com/maps/api/directions/json?"
+ "origin=" + start.latitude + "," + start.longitude
+ "&destination=" + end.latitude + "," + end.longitude
+ "&sensor=false&units=metric&mode=" + mode)
val result = URL("$url").readText()
val parser: Parser = Parser()
val stringBuilder: StringBuilder = StringBuilder(result)
val json: JsonObject = parser.parse(stringBuilder) as JsonObject
println("distance : ${json.string("routes.legs.distance.text")},")
println("$url") //test
设定点
distanceDier(LatLng(53.402971, 91.083748),LatLng(53.529799, 91.410684),"TravelMode")
日志:
位置误差
val result = URL("$url").readText()
网址:
如何获取与Json文件的距离以及错误代码是什么?fun distanceDier(开始:LatLng,结束:LatLng,模式:String){
fun distanceDier (start: LatLng, end: LatLng, mode: String) {
val url = ("http://maps.googleapis.com/maps/api/directions/json?"
+ "origin=" + start.latitude + "," + start.longitude
+ "&destination=" + end.latitude + "," + end.longitude
+ "&sensor=false&units=metric&mode=" + mode)
//val result = URL(url).readText()
//an extension over string (support GET, PUT, POST, DELETE with httpGet(), httpPut(), httpPost(), httpDelete())
url.httpGet().responseString { request, response, result ->
//do something with response
when (result) {
is Result.Failure -> {
}
is Result.Success -> {
val res = result.value
println("Result: $result")
val parser: Parser = Parser()
val stringBuilder: StringBuilder = StringBuilder(res)
val json: JsonObject = parser.parse(stringBuilder) as JsonObject
println("distance : ${json.lookup<String?>("routes.legs.distance.text")},")
}
}
}
}
val url=(“http://maps.googleapis.com/maps/api/directions/json?"
+“origin=“+start.latitude+”,“+start.longitude”
+“&destination=“+end.latitude+”,“+end.longitude”
+“&sensor=false&units=metric&mode=“+mode”)
//val result=URL(URL).readText()
//字符串上的扩展(支持GET、PUT、POST、DELETE和httpGet()、httpPut()、httpPost()、httpDelete())
url.httpGet().responseString{request,response,result->
//做些有反应的事情
何时(结果){
是结果。失败->{
}
这就是结果。成功->{
val res=结果值
println(“结果:$Result”)
val parser:parser=parser()
val stringBuilder:stringBuilder=stringBuilder(res)
val json:JsonObject=parser.parse(stringBuilder)作为JsonObject
println(“距离:${json.lookup(“routes.legs.distance.text”)},)
}
}
}
}
我使用的异步{distanceDier(LatLng(53.402971,91.083748),LatLng(53.529799,91.410684),“TravelMode”)}可能重复,但错误仍然存在。如果您不断得到networkMainThreadException
,则这不是重复的问题,这仍然是相同的问题。请参阅我链接的问题以获得修复。如果异步不起作用,我建议阅读。它有一个很好的替代方案,再加上大量的解释,这是行不通的。如果您尝试,会出现以下错误,因为Klaxon和Fuel不能很好地配合java.lang.ClassCastException:com.beust.Klaxon.JsonArray无法转换为java.lang.String
听起来像是一个数组,所以您应该调用parser.parseArray(stringBuilder)
。
fun distanceDier (start: LatLng, end: LatLng, mode: String) {
val url = ("http://maps.googleapis.com/maps/api/directions/json?"
+ "origin=" + start.latitude + "," + start.longitude
+ "&destination=" + end.latitude + "," + end.longitude
+ "&sensor=false&units=metric&mode=" + mode)
//val result = URL(url).readText()
//an extension over string (support GET, PUT, POST, DELETE with httpGet(), httpPut(), httpPost(), httpDelete())
url.httpGet().responseString { request, response, result ->
//do something with response
when (result) {
is Result.Failure -> {
}
is Result.Success -> {
val res = result.value
println("Result: $result")
val parser: Parser = Parser()
val stringBuilder: StringBuilder = StringBuilder(res)
val json: JsonObject = parser.parse(stringBuilder) as JsonObject
println("distance : ${json.lookup<String?>("routes.legs.distance.text")},")
}
}
}
}