android - 如何从房间数据库中的位置对象保存和检索纬度和经度

标签 android android-room android-location

我在我的应用中将 AndroidX Room 组件用于小型离线数据库。我希望能够将用户的位置(纬度和经度)保存到数据库中,供以后使用。 如何做到这一点以及最佳做法是什么?

我以前从未这样做过,在网上找不到任何帮助。

这就是我实际做的方式(显然是错误的方式):

@ColumnInfo(name = "session_location")
var sessionLocation: Location

我得到一个错误无法弄清楚如何将这个字段保存到数据库中

最佳答案

Location 类是什么?它是 android.location.Location 还是您定义的某个数据类?

在任何情况下,我都会使用 @Embedded POJO 类而不是其他人推荐的 TypeConverters

如果 Location 是您已经定义的类,那么只需在您的 sessionLocation 之上添加 @Embedded 注释

@Embedded
@ColumnInfo(name = "session_location")
var sessionLocation: Location

否则,如果 Locationandroid.location.Location,那么您不需要在该类中存储所有信息。您必须需要基本的 lat & long

我会创建一个类 Location 并存储这些基本信息并将其添加为 @Embedded。像下面这样的东西

class Location {
    var latitude: Double = 0
    var longitude: Double = 0
}

class User {
    @Embedded
    @ColumnInfo(name = "session_location")
    var sessionLocation: Location
}

正如其他人所建议的那样,TypeConverter 是一种解决方案,但无需序列化/反序列化 POJO,只需直接保存即可。

关于android - 如何从房间数据库中的位置对象保存和检索纬度和经度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56992855/

相关文章:

android - SQLite id 自增

android - 如何在 Android Room 中完全重新创建我的数据库?

java - 调试时 onPostExecute() 与 doInBackground() 无关

android - setOnKeyListener 在此代码中如何工作?

android - 在哪里可以获得所有 Android 设备的 Build.MODEL 名称列表?

android - 如何使用 QT 5.2 在 Android 上的发布输出中删除 Debug模式

Kotlin 类型别名与 Android Room TypeConverters

java - 获取基于国家的货币符号

android - 为什么我的 OnLocationChanged() 永远不会被调用?

android - 为 android requestSingleUpdate 设置超时