我对kotlin编程非常新,必须完成一个旅游指南项目。我希望有一个简单的问题,但我太愚蠢了,我想我不能解决它。
在下面的代码段中,我希望使用val "loc“(来自coroutine /addOnSuccessListener的内部)作为当前设置在协同线外的"LatLng(49.7913,9.9534)”上的“起始位置”。但是我如何在主线程之外得到这个值呢?遗憾的是,我不能只做"val startlocation = loc“:
拜托,有人有简单的解决办法吗?提前感谢!
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))
}发布于 2022-07-13 05:55:19
添加到build.gradle (app):
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.2'您的代码将如下所示:
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方法,则可能需要包装它们:
withContext(Dispatchers.Main) {
mMap.addMarker(MarkerOptions().position(startlocation).title("Marker in Würzburg"))
mMap.moveCamera(CameraUpdateFactory.newLatLng(startlocation))
}https://stackoverflow.com/questions/72960123
复制相似问题