0

Realm 是否支持持久保存 3rd 方 Parcelable 对象(如 Maps API 中的 MarkerOptions 类)?

所以,我正在为 Android 构建一个路线规划应用程序,我需要从 Maps API 中保留 LatLng、MarkerOptions 和 Polyline 对象的列表——所有这些都实现了 Parcelable。我想我会尝试使用 Realm 来保留对象列表。

我在 Realm 中阅读了有关Parceler库支持的信息,并试图在 Realm 中保留一个包含 LatLng 对象的 Parcelable 类。

import io.realm.RealmObject;
import io.realm.SavedLocationRealmProxy;

@Parcel
public class SavedLocation extends RealmObject{

private String locationName;
private LatLng location;
private String areaName;

public SavedLocation() {
}

public SavedLocation(String locationName, LatLng location) {
    this.locationName = locationName;
    this.location = location;
}

public SavedLocation(String locationName, LatLng location, String areaName) {
    this.locationName = locationName;
    this.location = location;
    this.areaName = areaName;
}

...

编译未完成并出现此错误

Error:(7, 8) error: Type com.google.android.gms.maps.model.LatLng of field location is not supported

我还尝试按照领域文档的指示添加此注释

@Parcel(implementations = { SavedLocationRealmProxy.class },
    value = Parcel.Serialization.BEAN,
    analyze = { SavedLocation.class })
public class SavedLocation extends RealmObject{
...

但是,由于包含 LatLng 类,未创建 SavedLocationRealmProxy。

只是提供了对 Parceler 的支持以使 RealmObjects 可打包还是 Parcelable 对象在 Realm 中是可持久的?

谢谢..

4

1 回答 1

0

Parceler 的支持允许将 RealmObjects 打包在 Intents/etc 中(正如 CommonsWare 在评论中指出的那样)。请注意,当 RealmObjects 被打包时,Realm 对象与 Realm 断开连接。

你为什么会收到这个错误?

LatLng 不扩展RealmObject。因此它无法保存到 Realm。为了保存您的 LatLng 对象,您需要创建自己的 LatLng 对象(例如MyLatLng或其他东西)并将它们映射。

如果您正在寻找使用 Realm 的 Geo Points 的一个很好的示例,您可能想在此处查看 Thorben Primke 的 realm-mapview 示例:https ://github.com/thorbenprimke/realm-mapview

在相关的说明中,可以在此处跟踪 Realms 地理点支持:https ://github.com/realm/realm-java/issues/1772

于 2016-01-19T23:31:07.370 回答