안드로이드 Realm DataBase
보통은 Realm의 data model class는 하나만 사용하지만 혹시라도 두 개 이상을 사용해야
한다면 어떻게 초기화 하는지 알아보겠습니다.
혼자 배우면서 어플을 만들다 보니 틀린 부분도 있을 수 있으니 참고하시기 바랍니다.
Realm 초기화 설정에 대한 설명은 따로 하지 않겠습니다.
사용된 Realm의 버전은 classpath "io.realm:realm-gradle-plugin:5.15.1"
Realm의 데이터 모델이 하나라면 RealmActivity.java를 만들어
@SuppressLint("Registered")
public class RealmActivity extends Application {
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
RealmConfiguration realmConfig = new RealmConfiguration.Builder()
.name("datasave.realm")
.schemaVersion(1)
.build();
Realm.setDefaultConfiguration(realmConfig);
}
}
초기화한 후 사용할 java 파일에서
Realm realm = Realm.getDefaultInstance();
이렇게 불러오면 됩니다.
하지만 데이터모델이 두 개 이상이면 다른 방식의 초기화가 필요합니다.
데이터 모델이 두 개가 있다는 가정하에
하나는 TestDataA.java
public class TestDataA extends RealmObject {
@PrimaryKey
private int count;
private String name;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
두 번째는 TestDataB.java
public class TestDataB extends RealmObject {
@PrimaryKey
private int count;
private String name;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
두 개의 데이터 모델을 만들었습니다.
이렇게 만든 데이터 모델을 RealmModule에 정의해 줍니다.
RealmTestModuleA.java를 하나 만들어
@RealmModule(classes = {TestDataA.class})
public class RealmTestModuleA {
}
다음 RealmTestModuleB.java를 역시 하나 만들어서
@RealmModule(classes = {TestDataB.class})
public class RealmTestModuleB {
}
이렇게 두 개의 데이터모델을 역시 두개의 Realm Module로 정의해 주었습니다.
이제 불러오기만 하면 됩니다.
MainActivity에서 첫 번째 module을 불러온다면
public class MainActivity extends AppCompatActivity {
private Realm realm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RealmInit();
}
private void RealmInit() {
RealmConfiguration testConfig = new RealmConfiguration.Builder()
.name("testdata.realm")
.schemaVersion(1)
.modules(new RealmTestModuleA())
.build();
realm = Realm.getInstance(testConfig);
}
@Override
protected void onDestroy() {
super.onDestroy();
realm.close();
}
}
이렇게 초기화해주면 우선 TestDataA 모델을 사용할 수 있습니다.
.name("testdata.realm") <- TestDataA의 데이터가 저장될 파일 이름
.schemaVersion(1) <- 버전 나중에 TestDataA의 내용이 변경 또는 추가된다면 버전업을 해서 관리해 주면 됩니다.
.modules(new RealmTestModuleA()) <- RealmTestModuleA.java 에서 정의된 TestDataA의 module
두 번째 모델의 초기화 역시 위에 내용과 같으며 초기화될 내용만 조금 변경해 주시면 됩니다.
private void RealmInit() {
RealmConfiguration testbConfig = new RealmConfiguration.Builder()
.name("testb.realm")
.schemaVersion(1)
.modules(new RealmTestModuleB())
.build();
realm = Realm.getInstance(testbConfig);
}
.name("testb.realm") <- 데이터가 저장될 파일 이름을 정의해 주시고
.modules(new RealmTestModuleB()) <- module을 두 번째 만든 RealmTestModuleB.java로 초기화해 주시면 됩니다.
Fragment에서 하신다면 onStart()에서 초기화해주시고 닫을 땐 onStop()에서 realm.close(); 로 닫아 주시면 됩니다.
혼자 배우기 힘드네요. 더 좋은 방법 있으시면 알려 주세요~
보다 자세한 초기화 및 데이터 질의 쓰기 삭제 등등은 아래 링크에서 확인하시면 됩니다.
'Android Studio' 카테고리의 다른 글
안드로이드 카드 뒤집기 - Android Flip Animation (0) | 2019.12.11 |
---|---|
숫자 (배열) 랜덤 섞기 - JAVA (0) | 2019.12.09 |
안드로이드 비슷한 기능의 여러 버튼 한번에 처리 - Resource (0) | 2019.10.29 |
JAVA - 랜덤함수 (중복제거) (0) | 2019.09.02 |
파이어베이스 - 쿼리 커서로 데이터 페이지화 (0) | 2019.06.25 |