首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >延迟属性mMap尚未初始化mMap

延迟属性mMap尚未初始化mMap
EN

Stack Overflow用户
提问于 2022-10-01 01:57:01
回答 1查看 111关注 0票数 0

类,它执行服务并初始化mMap: GoogleMap

代码语言:javascript
复制
class LocationServiceUser : Service(), OnMapReadyCallback {
    private val serviceScopeUser = CoroutineScope(SupervisorJob() + Dispatchers.IO)
    private lateinit var locationClient: LocationClientUser
    private val db = FirebaseFirestore.getInstance()
    private lateinit var mMap: GoogleMap
    private val markerOptions = MarkerOptions()

    override fun onBind(p0: Intent?): IBinder? {
        return null
    }

    override fun onCreate() {
        super.onCreate()
        locationClient = DefaultLocationClientUser(
            applicationContext,
            LocationServices.getFusedLocationProviderClient(applicationContext)
        )
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        when (intent?.action) {
            ACTION_READING_DATA -> readingData()
        }
        return super.onStartCommand(intent, flags, startId)
    }

    override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap
    }

    fun readingData() {
        locationClient.getLocation(5000L)
            .catch { e -> e.printStackTrace() }
            .onEach { location ->
                var lat = location.latitude
                var lng = location.longitude
                var currentLatLng = LatLng(lat, lng)
                db.collection("").document("")
                    .addSnapshotListener { documentUser, error ->
                        if (documentUser != null) {
                            lat = documentUser.getGeoPoint("localizacao")?.latitude!!
                            lng = documentUser.getGeoPoint("localizacao")?.longitude!!
                            Log.d(
                                "Response",
                                "Dado lido a cada 5s:  lat: $lat, lng: $lng}"
                            )
                            currentLatLng = LatLng(lat, lng)
                        }
                        if (::mMap.isInitialized) {
                            mMap.addMarker(
                                MarkerOptions().position(currentLatLng)
                                    .title("Minha Localizacao atual")
                            )
                            Log.d("Response", "Minha localizacao de agora: $currentLatLng")
                        }else{
                            Log.d("Response", "readingData: Erro ao inicializar o mMap")
                        }
                        markerOptions.position(currentLatLng)
                        mMap.addMarker(markerOptions)
                        mMap.moveCamera(CameraUpdateFactory.newLatLng(currentLatLng))
                    }
            }.launchIn(serviceScopeUser)
    }

    override fun onDestroy() {
        super.onDestroy()
        serviceScopeUser.cancel()
    }

    companion object {
        const val ACTION_READING_DATA = "ACTION_READING_DATA"
    }

使用此服务类的片段。

代码语言:javascript
复制
class UserFragment: Fragment() {
    private var _binding: FragmentUserBinding? = null
    private val binding: FragmentUserBinding get() = _binding!!
    private lateinit var locationClientUser: LocationClientUser

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentUserBinding.inflate(inflater,container,false)

        return binding.root
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        activity?.startService(Intent(context,LocationServices::class.java))
        locationClientUser = DefaultLocationClientUser(
            requireContext().applicationContext,
            LocationServices.getFusedLocationProviderClient(requireContext().applicationContext)
        )
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.btnReadingData.setOnClickListener {
            Intent(
                requireContext().applicationContext,
                LocationServiceUser::class.java
            ).apply {
                action = LocationServiceUser.ACTION_READING_DATA
                activity?.startService(this)
            }
        }
    }

初始化服务中的lateinit : GoogleMap存在问题,我知道从片段中开始是正常的,但是我的服务有我想要更新的loc数据。是否有一种方法来初始化服务中的延迟变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-01 06:01:33

代码语言:javascript
复制
mMap.addMarker(markerOptions)
                
mMap.moveCamera(CameraUpdateFactory.newLatLng(currentLatLng))

在这个块中添加这两行

代码语言:javascript
复制
if (::mMap.isInitialized) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73915324

复制
相关文章

相似问题

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