我在LogCat中收到此消息:
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:330)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:255)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:776)
Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to com.google.android.gms.maps.GoogleMap
在android studio中使用Kotlin
class GetDirectionsData : AsyncTask<Any?, String, String>() {
internal var mMap: GoogleMap? = null
internal var url: String = ""
internal var googleDirectionsData: String = ""
internal var duration: String? = null
internal var distance: String? = null
internal var latLng: LatLng? = null
override fun doInBackground(vararg objects: Any?): String {
mMap = objects[0] as GoogleMap
url = objects[1] as String
latLng = objects[2] as LatLng
val downloadUrl = DownloadUrl()
try {
googleDirectionsData = downloadUrl.readUrl(url)
} catch (e: IOException) {
e.printStackTrace()
}
return googleDirectionsData
}
override fun onPostExecute(s: String) {
val directionsList: Array<String>
val parser = DataParser()
directionsList = parser.parseDirections(s)
displayDirection(directionsList)
}
fun displayDirection(directionsList: Array<String>) {
val count = directionsList.size
for (i in 0 until count) {
val options = PolylineOptions()
options.color(Color.RED)
options.width(10f)
options.addAll(PolyUtil.decode(directionsList[i]))
mMap?.addPolyline(options)
}
}
} . //I call it from Activity Like this:val dataTransfer = arrayOfNulls<Any>(3)
var url:String = getDirectionsUrl()
var getDirectionsData = GetDirectionsData()
dataTransfer[0] = mGoogleMap
dataTransfer[1] = url
dataTransfer[2] = LatLng(mDestinationlatLng!!.latitude, mDestinationlatLng!!.longitude)
getDirectionsData.execute(dataTransfer)
答案 0 :(得分:0)
我猜你在object[0]
像这样改变你的实施并检查你的参数。
if(objects[0] is GoogleMap)
mMap = objects[0] as GoogleMap
if(objects[1] is String)
url = objects[1] as String
if(objects[2] is LatLng)
latLng = objects[2] as LatLng
更改您的代码:
var getDirectionsData = GetDirectionsData()
getDirectionsData.execute(mGoogleMap,url,LatLng(mDestinationlatLng!!.latitude, mDestinationlatLng!!.longitude))