2017-08-01 8 views
0

レルム内にオブジェクト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(); 
} 

このコードは、臭い汚いアプローチを使用して、私は任意のより良い解決策を見つけません。また、私は公式の文書では有益な情報が見つかりませんでした。

どのようにしてsingletonオブジェクトをRealmに実装しますか?

答えて

1

これはシングルトンなので、copyOrUpdateの代わりにcopyToRealmを使用することができます。これは、ユーザーを更新することを意味します(達成しようとしている目標に反する)。

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

ではなくinsertToRealmcopy*以来の方法のcopyToRealmの使用は、管理対象オブジェクト(再びそれを照会する必要はありません)を返します注意してください。

+0

このアプローチを使用していますか? – comm1x

+0

@ comm1xあなたのポイントを明確にすることはできますか? –

関連する問題