【问题标题】:Storing LatLng using Android Realm使用 Android Realm 存储 LatLng
【发布时间】:2016-11-09 10:18:53
【问题描述】:

存储包含 Google 的 LatLng 对象 int Realm 的 RealmObject 有什么更简洁的方法?

Area {
Latlat coord;
String name
}

【问题讨论】:

  • 使用coord.getLat()coord.getlang() 将它们存储为纬度和经度,两者都返回double
  • 我想这就是我要做的。不过需要进行一些重大的重构

标签: android realm


【解决方案1】:

虽然将数据保存为对象似乎很自然

LatLng { 
 double lat; 
 double lng; 
}

请记住,Realm 是一个对象存储 - 如果您创建一个对象,它将存储在一个表(实体)中。正如 Mohammed Ra 所建议的(在上面的评论中),您应该存储一个包含纬度和经度字段的对象,两者都是双精度的

class Area extends RealmObject {
  double lat; 
  double lng;
  String name;
  ...
}

此解决方案还提高了涉及坐标的查询的性能 - 在这种情况下,您应该在它们上添加 @Index 注释。

【讨论】:

  • Realm 不是 noSql 数据库,不是关系型
【解决方案2】:

您可以在 java 中创建这样的模型:

public class ActionDataModel extends RealmObject
{
  private LocationDataModel targetLatLong;

  @NonNull
  public LatLng getTargetLatLong()
  {
    return new LatLng(targetLatLong.getLatitude(), targetLatLong.getLongitude());
  }

  public void setTargetLatLong(@NonNull LatLng targetLatLong)
  {
    this.targetLatLong = new LocationDataModel(targetLatLong);
  }

}

这是 kotlin 中的父模型:

open class LocationDataModel(latLng: LatLng? = null)
: RealmObject() {
  var latitude = latLng?.latitude
  var longitude = latLng?.longitude
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    相关资源
    最近更新 更多