Как я могу сохранить собранные широту и долготу в хранилище данных jetpack

#android #location #datastore

Вопрос:

Когда я перемещаю карту, новая координата собирается из потока изменяемых данных. Я хочу сохранить новую координату, переместив карту в хранилище данных, но она работает неправильно, и карта повреждена. Как я могу это исправить?

В кодах ViewModel у меня есть эти три функции для ЗНАЧЕНИЙ ИНИЦИАЛОВ и ЗНАЧЕНИЙ МЕСТОПОЛОЖЕНИЯ ОБНОВЛЕНИЯ и УСТАНОВКИ МЕСТОПОЛОЖЕНИЯ

 private val _location = MutableStateFlow(getInitialLocation())  val location: StateFlowlt;Locationgt; = _location   private fun getInitialLocation(): Location = let {  Location("").let {  it.latitude = 14.599168243865952  it.longitude = 120.98413870283683  it  }  }  fun updateLocation(latitude: Double, longitude: Double) {  setLocation(Location("").let {  it.latitude = latitude  it.longitude = longitude  it  })  }   private fun setLocation(loc: Location) {  _location.value = loc   }  

Коды на экране карты:

 @Composable private fun MapViewContainer(  mapView: MapView,  navigatorViewModel: PickLocationViewModel ) {  val context = LocalContext.current  val dataStore = CheckLocationIsSetDataStore(context = context)   AndroidView(  factory = { mapView }  ) {  mapView.getMapAsync { map -gt;  map.apply {  navigatorViewModel.apply {    val location = location.value  val position = LatLng(location.latitude, location.longitude)  moveCamera(CameraUpdateFactory.newLatLngZoom(position, Constants.ZOOM_CAMERA))   setOnCameraIdleListener {  val cameraPosition = map.cameraPosition  updateLocation(  cameraPosition.target.latitude,  cameraPosition.target.longitude  )  }  viewModelScope.launch {  this@apply.location.collect{ location -gt;  dataStore.set(CheckLocationIsSetModel(location.altitude, location.longitude))  }  }  }  }  }  } }  

Коды классов хранилищ данных:

 class CheckLocationIsSetDataStore @Inject constructor(private val context: Context) :  IDataStorelt;CheckLocationIsSetModel, CheckLocationIsSetModelgt; {    override val get: Flowlt;CheckLocationIsSetModelgt;  get() = context.dataStore.data.catch { exception -gt;  if (exception is IOException) {  Log.e("DataStore Exception: ", exception.toString())  emit(emptyPreferences())  } else {  throw exception  }  }.map { preferences -gt;  CheckLocationIsSetModel(  lat = preferences[DataStoreKeys.IS_LOCATION_LAT_SET_KEY]  ?: Constants.IF_LOCATION_LAT_NOT_SET,  lng = preferences[DataStoreKeys.IS_LOCATION_LNG_SET_KEY]  ?: Constants.IF_LOCATION_LNG_NOT_SET  )  }   override suspend fun set(param: CheckLocationIsSetModel?) {  context.dataStore.edit { preferences -gt;  preferences[DataStoreKeys.IS_LOCATION_LAT_SET_KEY] = param?.lat ?: 0.0  preferences[DataStoreKeys.IS_LOCATION_LNG_SET_KEY] = param?.lng ?: 0.0  }  } }