为什么没有在地图上绘制多段线



我正试图在两个坐标之间绘制一条路线。该项目由几个片段组成,当加载带有地图的片段时,应立即通过坐标绘制路线。

fun setLatLng(origin: LatLng, destination: LatLng){
Log.d(TAG, "setLatLng: получение From: $origin, To: $destination")
this.origin = origin
this.destination = destination
val url: String = getDirectionsUrl(origin, destination)!!
val downloadTask = DownloadTask()
downloadTask.execute(url)
}
@Throws(IOException::class)
private fun downloadUrl(strUrl: String): String?{
var data = ""
var iStream: InputStream? = null
var urlConnection: HttpURLConnection? = null
try {
val url = URL(strUrl)
urlConnection = url.openConnection() as HttpURLConnection
urlConnection.connect()
iStream = urlConnection!!.inputStream
val br = BufferedReader(InputStreamReader(iStream))
val sb = StringBuffer()
var line: String? = ""
while (br.readLine().also { line = it } != null){
sb.append(line)
}
data = sb.toString()
br.close()
}catch (e: java.lang.Exception){
Log.d(TAG, "downloadUrl: ${e.toString()}")
}finally {
iStream!!.close()
urlConnection!!.disconnect()
}
return data
}
private fun getDirectionsUrl(origin: LatLng, dest: LatLng): String? {
val str_origin =
"origin=" + origin.latitude.toString() + "," + origin.longitude
val str_dest =
"destination=" + dest.latitude.toString() + "," + dest.longitude
val key = "key=$apiKey"
val parameters = "$str_origin&$str_dest&$key"
val output = "json"
return "https://maps.googleapis.com/maps/api/directions/$output?$parameters"
}
inner class DownloadTask: AsyncTask<String?, Void?, String?>(){
override fun onPostExecute(result: String?) {
super.onPostExecute(result)
val parserTask = ParserTask()
parserTask.execute(result)
}
override fun doInBackground(vararg url: String?): String? {
var data = ""
try{
data = downloadUrl(url[0].toString()).toString()
}catch (e: Exception){}
return data
}

}

inner class ParserTask: AsyncTask<String?, Int?, List<List<HashMap<String, String>>>?>(){
override fun doInBackground(vararg jsonData: String?): List<List<HashMap<String, String>>>? {
val jObject: JSONObject
var routes: List<List<HashMap<String, String>>>? = null
try{
jObject = JSONObject(jsonData[0])
val parser = DataParser()
routes = parser.parse(jObject)
}catch (e: java.lang.Exception){
e.printStackTrace()
}
return routes
}
override fun onPostExecute(result: List<List<HashMap<String, String>>>?) {
val points = ArrayList<LatLng?>()
val lineOptions = PolylineOptions()
for(i in result!!.indices){
val path = result[i]
for (j in path.indices){
val point = path[j]
val lat = point["lat"]!!.toDouble()
val lng = point["lng"]!!.toDouble()
val position = LatLng(lat, lng)
points.add(position)
}
lineOptions.addAll(points)
lineOptions.width(8f)
lineOptions.color(Color.RED)
lineOptions.geodesic(true)
}
if (points.size != 0) mMap.addPolyline(lineOptions)
builder()
}

}onPostExecute函数应该绘制路线。如果在调试模式下在函数上加一个点,应用程序将不会停止,但是,根据生成器方法在函数末尾被触发的事实判断,函数本身也被触发了。

问题出在api密钥中。决定更换它。

最新更新