无法在Room数据库中保存经度

问题描述 投票:0回答:2

我最近在开发基于位置的简单app时遇到了一个非常奇怪的问题。

基本上,我想要实现的是从LatLng获取OnMapClickListener对象,使用Dao将其latitudelongitude保存到Room中,然后在其他对象中检索它们(fusedLocationProviderClient的locationCallback确切地说)。

目标 - 一个简单的房间实体,它具有lat,lng和timestamp作为主键。

@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 - 我从用户点击获取坐标的地方,并使用Room将它们保存到SQLite中

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 - 我从Room检索坐标的地方

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类中更改变量声明的顺序 - 没有任何作用。

如果需要任何其他数据,我会发布它。先感谢您。

android kotlin double android-room
2个回答
1
投票

可能是这样,因为你称经度变长 - 长! “Long”是Java中的保留字,而不是Kotlin,我知道,但是,如果你试图改变这一行怎么办:

var long: Double = -1.0

var longitude: Double = -1.0

1
投票

我认为你的问题在于longitude的命名,你把它命名为long这是一种类型,所以也许你可以尝试将这个名称改成独特的东西。

© www.soinside.com 2019 - 2024. All rights reserved.