2017-01-23 22 views
0

Можно ли использовать Parcelable, Realm и GSON в одном проекте в Android-разработке? Мне просто интересно, как реализовать его одновременно, потому что каждая из этих библиотек/фреймворков имеет разные аннотации при создании POJO. Еще один - это Realm and Parcelable, сохраняющий данные, поэтому мне нужно реализовать оба?Использование Parcelable, Realm и GSON в разработке Android

+0

Классы, методы и т. Д. Могут иметь более одной аннотации. – CommonsWare

+0

Что делать, если я реализую Parcelable с помощью сферы? – vidalbenjoe

+0

Как насчет этого? Я не использовал Realm, но «Parcelable» не содержит много ограничений для реализаций, поэтому я был бы удивлен, если бы у Realm был конфликт. – CommonsWare

ответ

0

Это не должно быть проблемой, потому что вы можете использовать несколько аннотаций для одного метода или одного класса. Если аннотаций имеют такое же имя, вы должны дать ему точно название пакета, как @java.lang.Override

1

GSON используется, чтобы причудливость с Realm и требуется выполнить следующие CONFIG

Gson gson = new GsonBuilder() 
.setExclusionStrategies(new ExclusionStrategy() { 
    @Override 
    public boolean shouldSkipField(FieldAttributes f) { 
     return f.getDeclaringClass().equals(RealmObject.class); 
    } 

    @Override 
    public boolean shouldSkipClass(Class<?> clazz) { 
     return false; 
    } 
}) 
.create(); 

GSON использует field reflection читать данные из объектов, а это значит, что на управляемых RealmObjects ваши поля будут иметь значение null.

Это связано с тем, что GSON также не предлагает возможность использования доступа для доступа к данным, но прокси-сервер Realm не копирует данные в память.

Если вам нужен объект, который может быть отправлен через дооснащение с аннотацией @Body и является управляемым объектом RealmObject, когда вам нужно сделать apiService.sendObject(realm.copyFromRealm(myObject));.


Parcelable не является необходимым для RealmObject в большинстве случаев, так как любой объект, который управляется Realm уже сохранялся, и легко доступен в любом месте до тех пор, пока у вас есть свой первичный ключ.

Но если вам нужно сделать отдельные измененные копии данных, и вы намереваетесь использовать неуправляемый экземпляр класса непосредственно для создания объекта, который вы собираетесь сохранить, то вы можете легко создать класс Parcelable, используя библиотеку Parceler.



Короче:

  • RealmObjects легко persistable к Parcelable с помощью Parceler, но обычно это не нужно, вы просто отправить первичный ключ между деятельностью и не весь объект
  • GSON не работает с управляемыми объектами, потому что GSON is kinda dumb поэтому вам нужно сделать копию в памяти сначала


Лично я предпочитаю, чтобы мой ответ API и мои RealmModels отдельно, это легче, если вы будете полагаться на отображение в более оптимальной схеме.