Недавно я столкнулся с чрезвычайно странной проблемой при разработке моего простого приложения на основе определения местоположения.
По сути, я пытаюсь добиться получения LatLng
объекта из OnMapClickListener
, сохранения его latitude
и longitude
в Комнату, используя Dao, и затем извлекая их в некоторый другой объект (точнее, fusedLocationProviderClient
`locationCallback).
Код
Пункт назначения - простая сущность комнаты, у которой в качестве первичного ключа указаны широта, долгота и метка времени.
@Entity(tableName = "destinations")
data class Destination(
@PrimaryKey var timestamp: Long = 0L,
var lat: Double = -1.0,
var long: Double = -1.0
)
DestinationDao - для доступа к комнате.
@Dao
interface DestinationDao {
// Get the newest destination
@Query("SELECT * FROM destinations WHERE timestamp = (SELECT MAX(timestamp) FROM destinations)")
fun getDestination(): Destination?
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertDestination(destination: Destination)
}
MapsActivity - место, где я получаю координаты от щелчка пользователя и сохраняю их в SQLite, используя Room
map.setOnMapClickListener { latLng ->
val destination = Destination(System.nanoTime(), lat = latLng.latitude, long = latLng.longitude)
Log.d(TAG, destination.toString())
AppDatabase.getInstance(this).destinationDao().insertDestination(destination)
Log.d(TAG, AppDatabase.getInstance(this).destinationDao().getDestination().toString())
}
MyLocationListener -место, где я получаю свои координаты из комнаты
private val locationCallback = object : LocationCallback() {
override fun onLocationResult(userLocation: LocationResult?) {
val array = FloatArray(1)
val destination = AppDatabase.getInstance(appContext).destinationDao().getDestination()
Log.d(TAG, "Distance: ${array[0]} m\nlat: ${destination!!.lat}, long: ${destination.long}")
}
}
проблема
Кажется простым, но по неизвестной причине долгота никогда не сохраняется в комнате!Чтобы лучше проиллюстрировать это, вот журналы из этого MapsActivity
фрагмента (-1.0 - значение по умолчанию)
// Destination created from `LatLng` object from map click listener
D/MapsActivity: Destination(timestamp=248767407310345, lat=50.1813350498603, long=18.45104455947876)
// Destination retrieved from Room
D/MapsActivity: Destination(timestamp=248767407310345, lat=50.1813350498603, long=-1.0)
Я совершенно не знаю, почему это так.Я попытался изменить Double на String, а затем проанализировать его, попытался уменьшить количество десятичных разрядов, я даже попытался изменить порядок объявления переменных в классе Destination
- ничего не работает.
Если нужны какие-либо дополнительные данные,Я отправлю это.Заранее спасибо.