私はRealm(およびAndroid開発)の新人です.Slepletonクラスを使用してRealmデータ管理を簡素化して、グループプロジェクトで友人が使用するのが簡単です。EpicPandaForceのRealmManagerを正しく実装しましたか?
EpicPandaForceはRealmManager hereと呼ばれるシングルトンクラスを書かれているが、私はそれを実装の例を見つけることができなかったので、これは私が試したものです。だから私の友人は、いくつかのデータを保存したいとき
public class RealmManager {
private static RealmManager instance;
private final ThreadLocal<Realm> localRealm = new ThreadLocal<>();
RealmManager(){}
public synchronized static RealmManager getInstance(){
if(instance == null){
instance = new RealmManager();
}
return instance;
}
public Realm openLocalInstance() {
Realm realm = Realm.getDefaultInstance();
if(localRealm.get() == null) {
localRealm.set(realm);
}
return realm;
}
public Realm getLocalInstance() {
Realm realm = localRealm.get();
if(realm == null) {
throw new IllegalStateException("No open Realms were found on this thread.");
}
return realm;
}
public void closeLocalInstance() {
Realm realm = localRealm.get();
if(realm == null) {
throw new IllegalStateException(
"Cannot close a Realm that is not open.");
}
realm.close();
if(Realm.getLocalInstanceCount(Realm.getDefaultConfiguration()) <= 0) {
localRealm.set(null);
}
}
public void storePreferenceDao(int userID, String rank){
final PreferenceDao preferenceDao = new PreferenceDao();
preferenceDao.setUserID(userID);
preferenceDao.setRank(rank);
openLocalInstance();
getLocalInstance().executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealmOrUpdate(preferenceDao);
}
}, new Realm.Transaction.OnSuccess(){
@Override
public void onSuccess(){
System.out.println("Data is stored successfully!");
}
}, new Realm.Transaction.OnError(){
@Override
public void onError(Throwable error){
System.out.println("There is an error in storePreferenceDao()");
}
});
closeLocalInstance();
}
彼らはちょうど使用することができます:
RealmManager.getInstance().storePreferenceDao(123, "Alpaca");
これはどのように使用されるはずですか、それは冗長ですか?どうすればより効率的にすることができますか?
あなたのRealmManagerのクラスの 'getInstance()'をスレッドセーフで 'synchronized'としてください。 – Chithra
@vinSいいえ私のアプリにEpicPandaForceのRealmManagerクラスを実装しようとしていますが、どこにも例が見つかりません。 –
@Chithra Noted!ありがとう。私は今それを編集します。 –