我考虑境界为各种原因的数据库解决方案RealmObjects,但目前正在现在牛轧糖抛出的TransactionTooLargeException大一个取得了它,所以我不得不返工我目前的数据库架构,基于ActiveAndroid,它有自己的烦人的限制。难点在于Realm不支持继承(https://github.com/realm/realm-java/issues/761),他们似乎并不急于解决它。相反,他们推荐使用合成而不是继承,但我无法弄清楚如何使用Gson/Json反序列化工作。组成了继承与GSON系列化
实施例:
超类:动物,与子类狗和德国牧羊犬
public class Animal {
private int numLegs;
private boolean hasFur;
}
public class Dog extends Animal {
private String color;
private boolean canDoTricks;
}
public class GermanShepherd extends Dog {
public boolean isGuardDog;
public boolean isAtRiskOfHipDysplasia()
}
(对不起,这是一个超级罐头例子,只是为了说明)。
现在让我们来说说这个json的样子:
{
"numLegs" : 4,
"hasFur" : true,
"color" : "Black & Brown",
"canDoTricks" : true,
"isGuardDog" : true,
"isAtRiskofHipDysplasia" : false
}
现在,我无法修改JSON的,因为它是一个的给它给我的API。
看着这个答案:https://stackoverflow.com/a/41552457/4560689,它似乎有可能以一种非常冒险的方式做出类似的工作,但答案指出,存在限制,包括序列化会出错。由于服务器只会以不涉及疯狂构图的json格式进行会谈,因此会出现问题。
我可以写一个自定义的Gson解串器/序列化程序来使这项工作?如果是这样,那会是什么样子?我基本上需要能够为JSON有效载荷转换成高达Ñ对象,其中N - 1对象嵌套基础对象的内部。因为它看起来像Realm必须使用一些奇怪的界面组成形式,所以我有一个如下的类:
public class GermanShepherd {
public Animal animal;
public Dog dog;
// Generate a bunch of delegate methods here
}
我吠叫错了树吗?感觉Realm可能不适用于我想要做的事情,并且继承被构建到我在多个地方使用的API中,特别是在我想要保留的对象中,因此我必须找出解决方法或使用其他解决方案。 ActiveAndroid(我现在使用的)也是一个不太理想的解决方案,我生病时死于处理死锁,崩溃,查询后台线程,现在会导致崩溃,如果数据太大,无法通过意图等...与SQLite的所有问题。我愿意解决我的主要问题或解决此问题的替代方案。在此先感谢您的帮助!
我是谁写了你发布的答案。好吧,有一种方法可以通过创建一个GermanShepard POJO(非realmObject)来解决这个问题,它将按照您喜欢的方式与Gson序列化,并在您的GermanShepard的realmObject和此POJO之间进行某种映射。事实上,这正是PPL为解决此问题而采取的措施。检查[this](http://johnpetitto.com/no-more-realm)。如果你想让我写一个关于如何做的例子,请告诉我,我会发布一些代码^^。但我会推荐自定义序列化器,这是一个更好的方法。 – AnixPasBesoin
@AnixPasBesoin,感谢您的回复!如果可能,我想自定义序列化程序。你有没有想过我会如何做这项工作?我是否像之前一样使用Gson将API的响应反序列化为RealmObject,然后将RealmObject序列化回API所期望的json格式? –
Gson和其他自动序列化器是否对其他人来说很奇怪?就个人而言,我认为我更喜欢手动序列化/反序列化...一些重复(必须添加新字段到序列化器和反序列化器),但我认为这是一个很好的抽象层,增加了控制和灵活性 - 更新api不需要更新对象的内部;它是如何与API交流的。 –