尝试使用AsyncTask将对象强制转换为GoogleMap时,我得到java.lang.RuntimeException<>

时间:2018-01-11 09:09:59

标签: java android android-studio kotlin

我在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)

1 个答案:

答案 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))