我最近在开发基于位置的简单应用程序时遇到了一个非常奇怪的问题。
基本上,我要实现的是从LatLng
获取OnMapClickListener
对象,使用Dao将其latitude
和longitude
保存到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}")
}
}
这似乎很简单,但是由于未知的原因,经度永远不会保存到Room!为了更好地说明这一点,以下是该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
类中变量声明的顺序-无效。
如果需要任何其他数据,我将其发布。 预先谢谢你。
答案 0 :(得分:1)
可能是这样,因为您称您为经度变量-长!我知道,“ Long”是Java中的保留字,不是Kotlin中的保留字,但是,如果您尝试更改此行,该怎么办:
var long: Double = -1.0
到
var longitude: Double = -1.0
答案 1 :(得分:1)
我认为您的问题出在longitude
的命名上,您将其命名为long
是一种类型,因此也许您可以尝试将该名称更改为唯一的名称。
答案 2 :(得分:0)
"long" 是一个保留关键字,因为它也是一个变量类型。我有同样的问题。将其更改为经度(例如),它将起作用。