【问题标题】:I get java.lang.RuntimeException when trying to cast Object to GoogleMap using AsyncTask<>尝试使用 AsyncTask<> 将 Object 转换为 GoogleMap 时出现 java.lang.RuntimeException
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 应用程序没有访问第一个 IF 并访问第二个 IF 但通过错误 java.lang.ArrayIndexOutOfBoundsException: length=1;索引=1
猜你喜欢
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2020-03-29
  • 2021-02-10
  • 2021-10-03
  • 1970-01-01
相关资源
最近更新 更多