Android 将具有泛型字段的对象存储到数据库中的最佳实践

Android 将具有泛型字段的对象存储到数据库中的最佳实践,android,database,sqlite,generics,Android,Database,Sqlite,Generics,我正在Android中实现一个私有应用程序,该应用程序以JSON格式从服务器请求一些数据,将其解除到POJO,并需要将对象存储在本地数据库中。问题是Child类包含一个泛型值,该值可能是基元类型(整数、字符串等)或一些自定义对象。我试过了,但我成功了。我读过,但我不是很满意 在数据库中存储包含泛型值的对象的最佳方法是什么?我不依赖于特定的数据库,但更喜欢SQLite 没有的数据结构的简单POJO扩展了RealmObject: public class Parent { public in

我正在Android中实现一个私有应用程序,该应用程序以JSON格式从服务器请求一些数据,将其解除到POJO,并需要将对象存储在本地数据库中。问题是
Child
类包含一个泛型值,该值可能是基元类型(整数、字符串等)或一些自定义对象。我试过了,但我成功了。我读过,但我不是很满意

在数据库中存储包含泛型值的对象的最佳方法是什么?我不依赖于特定的数据库,但更喜欢SQLite

没有
的数据结构的简单POJO扩展了RealmObject

public class Parent {
    public int i;
    public Child mChild;
}
包含泛型字段的类:

public class Child<T> {
    public int i;
    public T mValue;
}
下面是一个示例:

Parent p = new Parent();
p.i = 10;
// Child<String> c = new Child<>();
// c.mValue = "I'm a string!";
Child<Value> c = new Child<>();
Value v = new Value();
v.s = "I'm a custom object!";
v.i = 42;
p.mChild = c;

Realm.init(getApplicationContext());
Realm realm = Realm.getDefaultInstance();
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        Parent parent = realm.copyToRealm(p);
    }
});
Parent p=newparent();
p、 i=10;
//Child c=新的Child();
//c.mValue=“我是一个字符串!”;
Child c=新的Child();
值v=新值();
v、 s=“我是自定义对象!”;
v、 i=42;
p、 mChild=c;
init(getApplicationContext());
Realm Realm=Realm.getDefaultInstance();
realm.executeTransaction(新realm.Transaction(){
@凌驾
公共void执行(领域){
Parent=realm.copyToRealm(p);
}
});

一个快速而肮脏的解决方案是保存子对象的json表示,这是一个选项吗?我曾经考虑过类似的事情,例如使用CouchDB。但是工作流是这样的:JSON->POJO->JSON(存储在CouchDB中)->POJO(从CouchDB获取结果)我不认为这是一个解决方案。好吧,这不是一个好的解决方案XD您可以将
mChild
仅作为JSON存储在表中,并且您可能需要添加额外的字段来告诉这个孩子是哪种类型,(反序列化时帮助)这样做的缺点是,如果您希望根据JSON字段中的值查询某些数据,那么它将是无用的,例如(其中child.x='1')你做不到this@Yazan有趣的解决方案:)通过
Child
类中的值获取数据没有优先级。一个快速而肮脏的解决方案是保存子对象的json表示,这是一个选项吗?我考虑过类似的事情,例如使用CouchDB。但是工作流是这样的:JSON->POJO->JSON(存储在CouchDB中)->POJO(从CouchDB获取结果)我不认为这是一个解决方案。好吧,这不是一个好的解决方案XD您可以将
mChild
仅作为JSON存储在表中,并且您可能需要添加额外的字段来告诉这个孩子是哪种类型,(反序列化时帮助)这样做的缺点是,如果您想根据JSON字段中的值查询某些数据,那么它将毫无用处,例如(child.x='1'),您无法实现this@Yazan有趣的解决方案:)通过
子类中的值获取数据没有优先级。
Parent p = new Parent();
p.i = 10;
// Child<String> c = new Child<>();
// c.mValue = "I'm a string!";
Child<Value> c = new Child<>();
Value v = new Value();
v.s = "I'm a custom object!";
v.i = 42;
p.mChild = c;

Realm.init(getApplicationContext());
Realm realm = Realm.getDefaultInstance();
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        Parent parent = realm.copyToRealm(p);
    }
});