Можно ли использовать Parcelable, Realm и GSON в одном проекте в Android-разработке? Мне просто интересно, как реализовать его одновременно, потому что каждая из этих библиотек/фреймворков имеет разные аннотации при создании POJO. Еще один - это Realm and Parcelable, сохраняющий данные, поэтому мне нужно реализовать оба?Использование Parcelable, Realm и GSON в разработке Android
ответ
Это не должно быть проблемой, потому что вы можете использовать несколько аннотаций для одного метода или одного класса. Если аннотаций имеют такое же имя, вы должны дать ему точно название пакета, как @java.lang.Override
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 отдельно, это легче, если вы будете полагаться на отображение в более оптимальной схеме.
Классы, методы и т. Д. Могут иметь более одной аннотации. – CommonsWare
Что делать, если я реализую Parcelable с помощью сферы? – vidalbenjoe
Как насчет этого? Я не использовал Realm, но «Parcelable» не содержит много ограничений для реализаций, поэтому я был бы удивлен, если бы у Realm был конфликт. – CommonsWare