首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Coroutine外部的Coroutine内部获取值?

从Coroutine外部的Coroutine内部获取值?
EN

Stack Overflow用户
提问于 2022-07-13 02:02:09
回答 1查看 53关注 0票数 0

我对kotlin编程非常新,必须完成一个旅游指南项目。我希望有一个简单的问题,但我太愚蠢了,我想我不能解决它。

在下面的代码段中,我希望使用val "loc“(来自coroutine /addOnSuccessListener的内部)作为当前设置在协同线外的"LatLng(49.7913,9.9534)”上的“起始位置”。但是我如何在主线程之外得到这个值呢?遗憾的是,我不能只做"val startlocation = loc“:

拜托,有人有简单的解决办法吗?提前感谢!

代码语言:javascript
复制
override fun onMapReady(googleMap: GoogleMap) {
    mMap = googleMap
    val routenuebergabe = intent.getStringExtra("tourname").toString()
    Firebase.firestore.collection("Routen").document(routenuebergabe).get()
        .addOnCompleteListener { it ->
            if (it.isSuccessful) {
                CoroutineScope(Dispatchers.IO).launch {
                    val koors = it.await().get("starting_location").toString()
                    val strs = koors.split(",").toTypedArray()
                    val lat = strs[0].toDouble()
                    val lng = strs[1].toDouble()

                    Log.e("RoutendarstellungActivity", "Fatal $lat & $lng")
                    val loc = LatLng(lat, lng)
                }
            }
        }
    val startlocation = LatLng(49.7913, 9.9534)
    mMap.addMarker(MarkerOptions().position(startlocation).title("Marker in Würzburg"))
    mMap.moveCamera(CameraUpdateFactory.newLatLng(startlocation))
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-13 05:55:19

添加到build.gradle (app):

代码语言:javascript
复制
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.2'

您的代码将如下所示:

代码语言:javascript
复制
override fun onMapReady(googleMap: GoogleMap) = CoroutineScope(Dispatchers.IO).launch {
    try {
        mMap = googleMap

        val routenuebergabe = intent.getStringExtra("tourname").toString()
        val snapshot = Firebase.firestore.collection("Routen")
            .document(routenuebergabe)
            .get()
            .await()

        val koors = snapshot.get("starting_location").toString()
        val strs = koors.split(",").toTypedArray()
        val lat = strs[0].toDouble()
        val lng = strs[1].toDouble()

        val startlocation = LatLng(lat, lng)

        mMap.addMarker(MarkerOptions().position(startlocation).title("Marker in Würzburg"))
        mMap.moveCamera(CameraUpdateFactory.newLatLng(startlocation))
    } catch (e: Exception) {
        // Do something...
    }
}

如果只需要从UI线程调用GoogleMap方法,则可能需要包装它们:

代码语言:javascript
复制
withContext(Dispatchers.Main) {
    mMap.addMarker(MarkerOptions().position(startlocation).title("Marker in Würzburg"))
    mMap.moveCamera(CameraUpdateFactory.newLatLng(startlocation))
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72960123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档