将具有通用字段的对象存储到数据库中的最佳实践

时间:2017-07-23 17:20:06

标签: android database sqlite generics

我在Android中实现了一个私人使用的应用程序,它以JSON格式从服务器请求一些数据,将其deselialize到POJO并需要将对象存储在本地数据库中。问题是Child类包含泛型值,值也可以是基本类型(整数,字符串,...)或某些自定义对象。我试过了Realm,但我得到了NPE。我读过关于EAV-Pattern的内容,但我并不满意。

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

没有extends RealmObject的数据结构的简单POJO:

public class Parent {
    public int i;
    public Child mChild;
}

包含通用字段的类:

public class Child<T> {
    public int i;
    public T mValue;
}

自定义对象:

public class Value {
    public int i;
    public String s;
}

尝试Realm的一个例子:

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);
    }
});

0 个答案:

没有答案