2016-01-19 2 views
0

Предоставляет ли Realm поддержку для сохранения сторонних парцелярных объектов (например, класса MarkerOptions из Maps API)?Возможно ли сохранение постоянных сторонних объектов в царстве?

Итак, я создаю приложение для планирования маршрутов для Android, и мне нужно сохранить список объектов LatLng, MarkerOptions и Polyline из API Карт, и все они реализуют Parcelable. Я думал, что попробую Realm, чтобы сохранить список объектов.

Я читал о поддержке библиотеки Parceler в Realm и пытался сохранить класс Parcelable, который содержит объект LatLng в Realm.

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{ 
... 

Однако SavedLocationRealmProxy не получает создается за счет ограждающих LatLng класс.

Является ли поддержка Parceler только предоставленной, чтобы сделать RealmObjects неотъемлемыми или Возможные Объекты, сохраняющиеся в Царстве?

Спасибо ..

+0

Сделайте обходной путь: создайте свой собственный класс посылок, который содержит двойники, представляющие широту/долготу. Поскольку LatLng не поддерживается, вы всегда можете обойти это со своим собственным классом, хотя он кажется интуитивным, просто назовите его как MarkerOptionsEntity. Теперь вы работаете с типом сопоставления DTO/Entity модели, который не слишком завышен. –

+0

Просто потому, что класс реализует 'Parcelable', не означает, что он может быть сохранен через Realm или любым другим способом. Единственной целью «Parcelable» является возможность размещения экземпляров в «Parcel» для IPC. – CommonsWare

+0

Вы можете только сохранить 'RealmObject' в 'Realm'. Вам понадобятся ваши собственные классы «RealmLatLng», «RealmMarkerOptions» и «RealmPolyline», каждый из которых «расширяет RealmObject», а затем вам нужно будет сопоставить между двумя типами классов. – EpicPandaForce

ответ

0

поддержка от Parceler позволяет RealmObjects быть поделен в намерениях/и т.д. (как CommonsWare указано в комментариях). Обратите внимание, что когда RealmObjects разделены, объекты Realm становятся отключенными от Realm.

Почему вы получаете эту ошибку?

LatLng не распространяется RealmObject. Поэтому он не может быть сохранен в Царстве. Чтобы сохранить ваши объекты LatLng, вам нужно будет создать собственный объект LatLng (например, MyLatLng или что-то еще) и сопоставить их.

Если вы ищете хороший пример Geo точек с Realm, вы можете захотеть, чтобы проверить пример царства-MAPview Thorben Primke здесь: https://github.com/thorbenprimke/realm-mapview

В связи с этим отметил, Realms гео Поддержка точек может быть отслежена здесь: https://github.com/realm/realm-java/issues/1772

+0

Спасибо Донн. Это очищает мои сомнения. Я уже создал новый класс LatLng, который расширяет объект Realm после ваших и ответов Лукаса. В моих методах getter я пытался возвращать объекты LatLng google, поскольку я думал, что это не потребует от меня изменения всего кода, который уже использует LatLng, однако Realm не позволяет использовать какие-либо методы помимо getter setter, которые возвращают объекты класса из-за их Прокси-классы.Я просто пытаюсь сохранить данные, но, похоже, все сложнее сэкономить сторонние объекты, используя Realm. – abhiank

+0

@abhiank Последние изменения в Realm дают вам больше гибкости с RealmObjects и пользовательскими методами и логикой. См. Этот выпуск новостей от Realm о пользовательской логике в RealmObjects: https://realm.io/news/android-installation-change/ Наслаждайтесь! –

+0

это хорошо! .. к счастью, я смог заставить его работать .. какой-то дерьмовый код здесь и там: P .. но сохранение и извлечение работает сейчас :) – abhiank

Смежные вопросы