是否可以在 Realm 中保留 3rd Party Parcelable 对象?

Is it possible to persist 3rd Party Parcelable Objects in Realm?

Realm 是否支持持久化第 3 方 Parcelable 对象(例如 Maps API 中的 MarkerOptions class)?

因此,我正在为 Android 构建一个路线规划应用程序,我需要保留来自地图 API 的 LatLng、MarkerOptions 和 Polyline 对象列表 - 所有这些都实现了 Parcelable。我想我会尝试使用 Realm 来持久化对象列表。

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

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

我也尝试按照 Realm documention

的指示添加此注释
@Parcel(implementations = { SavedLocationRealmProxy.class },
    value = Parcel.Serialization.BEAN,
    analyze = { SavedLocation.class })
public class SavedLocation extends RealmObject{
...

但是,由于包含 LatLng class,因此不会创建 SavedLocationRealmProxy。

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

谢谢..

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

为什么会出现此错误?

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

如果您正在寻找使用 Realm 的地理点的良好示例,您可能想在此处查看 Thorben Primke 的 realm-mapview 示例:https://github.com/thorbenprimke/realm-mapview

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