当使用AsyncTask 将Object转换为GoogleMap时,我得到java.lang.RuntimeException

我在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() { 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 val parser = DataParser() directionsList = parser.parseDirections(s) displayDirection(directionsList) } fun displayDirection(directionsList: Array) { 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(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[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))