2017-08-01 106 views
0

我想在Realm中保留User的對象,並且我想只保留單個對象並像單身人士UserProfile.getInstance()一樣將它存在。Realm中的單個對象

那麼如何實現呢?

我用它骯髒的方法(如我介意)

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

由於這是一個單身人士,你可以使用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*方法將返回管理對象(無需再次查詢它)。

+0

你使用這種方法嗎? – comm1x

+0

@ comm1x你能澄清你的觀點嗎? –