Java 在Android开发中使用Parcelable、Realm和GSON

Java 在Android开发中使用Parcelable、Realm和GSON,java,android,gson,realm,parcelable,Java,Android,Gson,Realm,Parcelable,在Android开发的一个项目中使用Parcelable、Realm和GSON可以吗?我只是想知道如何同时实现它,因为在创建POJO时,每个库/框架都有不同的注释。另一个是Realm和Parcelable都是持久化数据,所以我需要实现它们吗?这应该没有问题,因为您可以对一个方法或一个类使用多个注释。 如果一个注释具有相同的名称,您应该给它一个确切的包名,如@java.lang.Override,这应该没有问题,因为您可以对一个方法或一个类使用多个注释。 如果注释具有相同的名称,则应为其提供与包名

在Android开发的一个项目中使用Parcelable、Realm和GSON可以吗?我只是想知道如何同时实现它,因为在创建POJO时,每个库/框架都有不同的注释。另一个是Realm和Parcelable都是持久化数据,所以我需要实现它们吗?

这应该没有问题,因为您可以对一个方法或一个类使用多个注释。
如果一个注释具有相同的名称,您应该给它一个确切的包名,如
@java.lang.Override

,这应该没有问题,因为您可以对一个方法或一个类使用多个注释。
如果注释具有相同的名称,则应为其提供与包名完全相同的名称,如
@java.lang.Override

GSON过去与Realm有一些奇怪之处,并且需要以下配置

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 Gson=new GsonBuilder()
.SetExclutionStrategy(新的ExclutionStrategy)(){
@凌驾
公共布尔值shouldSkipField(字段属性f){
返回f.getDeclaringClass().equals(RealmObject.class);
}
@凌驾
公共布尔shouldSkipClass(类clazz){
返回false;
}
})
.create();

GSON使用
字段反射
从对象读取数据,这意味着在托管RealmObjects上,您的字段将为
null

这是因为GSON也不提供使用访问器获取数据的选项,但领域代理不会将数据复制到内存中

如果您需要一个对象,该对象可以通过使用
@Body
注释进行改装发送,并且是托管RealmObject,则需要执行
apiService.sendObject(realm.copyFromRealm(myObject))


Parcelable
对于
RealmObject
在大多数情况下都不是必需的,因为由领域管理的任何对象都已经被持久化,并且只要您有它的主键,就可以在任何地方随时可用

但是,如果您需要制作分离的可修改的数据副本,并且打算直接使用类的非托管实例来构建要保存的对象,那么您可以使用库轻松创建
Parcelable



简言之:

  • RealmObjects可以使用
    Parceler
    轻松地持久化为Parcelable,但您通常不需要它,只需在活动之间发送主键,而不是整个对象
  • GSON不能很好地处理托管对象,因为您需要首先创建内存中的副本



就我个人而言,我更喜欢将我的API响应和RealmModel分开,如果您依赖于映射到更优化的模式,这会更容易一些。

GSON过去对Realm有一些古怪之处,需要以下配置

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 Gson=new GsonBuilder()
.SetExclutionStrategy(新的ExclutionStrategy)(){
@凌驾
公共布尔值shouldSkipField(字段属性f){
返回f.getDeclaringClass().equals(RealmObject.class);
}
@凌驾
公共布尔shouldSkipClass(类clazz){
返回false;
}
})
.create();

GSON使用
字段反射
从对象读取数据,这意味着在托管RealmObjects上,您的字段将为
null

这是因为GSON也不提供使用访问器获取数据的选项,但领域代理不会将数据复制到内存中

如果您需要一个对象,该对象可以通过使用
@Body
注释进行改装发送,并且是托管RealmObject,则需要执行
apiService.sendObject(realm.copyFromRealm(myObject))


Parcelable
对于
RealmObject
在大多数情况下都不是必需的,因为由领域管理的任何对象都已经被持久化,并且只要您有它的主键,就可以在任何地方随时可用

但是,如果您需要制作分离的可修改的数据副本,并且打算直接使用类的非托管实例来构建要保存的对象,那么您可以使用库轻松创建
Parcelable



简言之:

  • RealmObjects可以使用
    Parceler
    轻松地持久化为Parcelable,但您通常不需要它,只需在活动之间发送主键,而不是整个对象
  • GSON不能很好地处理托管对象,因为您需要首先创建内存中的副本



就我个人而言,我更喜欢将API响应和RealmModel分开,如果依赖于映射到更优化的模式,这会更容易。

类、方法等可以有多个注释。如果我用realm实现Parcelable呢?怎么样?我没有使用Realm,但是
Parcelable
对实现没有太多限制,所以如果Realm有冲突,我会感到惊讶。类、方法等可以有多个注释。如果我用Realm实现Parcelable呢?怎么样?我没有使用过领域,但是
Parcelable
对实现没有太多限制,所以如果领域发生冲突,我会感到惊讶。