android如何构建 realm 数据库无需实例化具有一对一的映射中的 null 变量吗?

标签: Java Android realm
发布时间: 2017/3/19 14:05:15
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我如何将结构我 Realm 数据库如果用户输入之一 4 个字段有一个选项︰ a、 b、 c、 d。

目前我与所有的 getter 和 setter 在一个类中,创建了一个 RealmObject 模型类所以如果用户添加到 c,输出看起来像这样︰

[modelClassName = [{a:null},{b:null},{c:6664},{d:null}]]

这是最好的方式去做吗?或我应该创建为每个变量的模型班吗?后者似乎有点过分了。

解决方法 1:

我的文章所述设计的架构 Realm 有效,你可以将这些字段存储在一个"表",并将确定哪些字段是当前有效读取额外鉴别器字段存储。

所以在你的情况,

public class Something extends RealmObject {
    public static final String TYPE_A = "a";
    public static final String TYPE_B = "b";
    public static final String TYPE_C = "c";
    public static final String TYPE_D = "d";

    private String a;
    private String b;
    private String c;
    private String d;

    @Index
    private String discriminator;

    public String getA() {
        return a;
    }

    public String getB() {
        return b;
    }

    public String getC() {
        return c;
    }

    public String getD() {
        return d;
    }

    public void setA(String a) {
        this.a = a;
        this.b = null;
        this.c = null;
        this.d = null;
        this.discriminator = TYPE_A;
    }

    public void setB(String b) {
        this.a = null;
        this.b = b;
        this.c = null;
        this.d = null;
        this.discriminator = TYPE_B;
    }

    public void setC(String c) {
        this.a = null;
        this.b = null;
        this.c = c;
        this.d = null;
        this.discriminator = TYPE_C;
    }

    public void setD(String d) {
        this.a = null;
        this.b = null;
        this.c = null;
        this.d = d;
        this.discriminator = TYPE_D;
    }
}

或类似的东西。额外的验证或一些统一 getValue() 可以添加方法,类型可以由 enum 相反 (枚举和枚举的 name() 可以存储在 Realm ),等等。

事实上,如果你想,你甚至就可以合并所有 abcd 字段 1 字段称为 ' 值,并还保持鉴相器。

public class Something extends RealmObject {
    public static final String TYPE_A = "a";
    public static final String TYPE_B = "b";
    public static final String TYPE_C = "c";
    public static final String TYPE_D = "d";

    @Index
    private String discriminator;

    private String value;

    // getters, setters

    public void setA(String a) {
        this.value = a;
        this.discriminator = TYPE_A;
    }

    public void setB(String b) {
        this.value = b;
        this.discriminator = TYPE_B;
    }

    public void setC(String c) {
        this.value = c;
        this.discriminator = TYPE_C;
    }

    public void setD(String d) {
        this.value = d;
        this.discriminator = TYPE_D;
    }
}

该轮到你,真的。


这个答案是适用于 Realm 0.88.0+

赞助商