【发布时间】:2018-01-11 09:09:59
【问题描述】:
我在 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)
【问题讨论】:
-
这意味着你的第一个参数是
Object[]。您确定您发送的参数正确吗? -
@riadrifai 是的,我在光标到达 mMap = objects[0] as GoogleMap 后正确发送了它。应用程序通过异常。
-
你能显示你如何调用任务和发送什么的代码吗?
-
val dataTransfer = arrayOfNulls
(3) 。 var url:String = getDirectionsUrl() 。 var getDirectionsData = GetDirectionsData() 。数据传输[0] = mGoogleMap 。数据传输[1] = 网址。 dataTransfer[2] = LatLng(mDestinationlatLng!!.latitude, mDestinationlatLng!!.longitude) getDirectionsData.execute(dataTransfer) . -
@riadrifai 检查我更新了代码。
标签: java android android-studio kotlin