我想在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
个对象?
答案 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*
方法将返回托管对象(无需再次查询)。