Карта Google Не показывает Маркер при использовании LiveData

#android #kotlin

Вопрос:

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

В моем отладчике Android я почти уверен, что метод LiveData работает, потому displayAllBookmarks что метод on (пожалуйста, обратитесь к приведенному ниже коду) получает все данные из базы данных. И каждый раз, когда я добавлял новую закладку на карту, вызывались живые данные. Так что я не думаю, что с живыми данными что-то не так.

Вот мой код, чтобы показать Маркер на моей карте

Метод onMapReady()

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

    ------------- Bunch of method --------------

    createBookmarkMarkerObserver()

}
 

Метод LiveData createBookmarkMarkerObserver()

 private fun createBookmarkMarkerObserver() {
    mapsViewModel.getBookmarkMarkerViews()?.observer(
        this, { it ->
        it?.let {
            displayAllBookmarks(it)
        } 
    )
}
 

Повторите результат закладки displayAllBookmarks(bookmarks)

 private fun displayAllBookmarks(bookmarks: List<MapsViewModel.BookmarkMarkerView>) {
    bookmarks.forEach { it ->
        addPlaceMarker(it)
    }
    Log.e("Marker", bookmarks.toString())
}
 

Добавление маркера места addPlaceMarker(MapsViewModel<BookmarkMarkerView>)

 private fun addPlaceMarker(
    bookmark: MapsViewModel.BookmarkMarkerView): Marker? {
    val marker = mMap.addMarker(MarkerOptions()
        .position(bookmark.location)
        .icon(BitmapDescriptorFactory.defaultMarker(
            BitmapDescriptorFactory.HUE_AZURE))
        .alpha(0.8f))
    marker.tag = bookmark
    return marker
}
 

для MapsViewModel.BookmarkMarkerView класса это только данные, как показано ниже

 data class BookmarkMarkerView(
    var id: Long? = null,
    var location: LatLng = LatLng(0.0,0.0)
)
 

Если для этого потребуется какая-либо дополнительная информация, пожалуйста, просто сообщите мне.

Большое Спасибо

Комментарии:

1. Я сомневаюсь, что ваша проблема связана с livedata, вы жестко закодировали значения и отправили их на маркер на своей карте без livedata ? Также addPlaceMarker() функция возвращает a Marker , но она нигде не используется, почему ?

2. Привет @SharpEdge, Вы правы, после того, как я сравнил сохраненный номер в моей базе данных с местоположением по широте и долготе, номер стал другим. На отображении Закладки я случайно установил Широту с Долготой. Спасибо