领域中的单个对象

时间:2017-08-01 22:57:51

标签: android realm

我想在Realm中保留User的对象,我想只保留单个对象并像单身UserProfile.getInstance()那样在任何地方获取它。

那么如何实现呢?

我是用脏方法做的(我记得)

public static User getInstance() {
    Realm realm = Realm.getDefaultInstance();
    User user = realm.where(User.class).findFirst();
    if (user != null) {
        // If object exists in db
        return user;
    }

    // If object does not exist, we should to create it
    realm.executeTransaction(realm -> {
        realm.insertOrUpdate(new User());
    });

    // After create we should to return already 'managed' object.
    return realm.where(User.class).findFirst();
}

这段代码闻起来很糟糕,但我找不到更好的解决方案。我也没有在官方文档中找到任何有用的信息。

如何在Realm中实现singleton个对象?

1 个答案:

答案 0 :(得分:1)

由于这是一个单身人士,因此您可以使用copyToRealm而不是copyOrUpdate来推断您想要更新用户(违反您尝试实现的目标)。

class Foo {
    private volatile User user = null;
    public User getInstance() {
        if (user == null) {
            synchronized(this) {
                if (user == null)
                // If object does not exist, we create it
                realm.executeTransaction(realm -> {
                    user = realm.copyToRealm(new User());
                });
            }
        }
        return user;
    }
}

请注意,使用copyToRealm代替insertToRealm,因为copy*方法将返回托管对象(无需再次查询)。