Android/Realm
[안드로이드 Realm] Realm 시작하기
정코드
2019. 5. 17. 17:38
전제 조건
ㆍAndroid Studio 버전 1.5.1 이상
ㆍJDK 버전 7.0 이상
ㆍ최신 버전의 Android SDK
ㆍAndroid API 레벨 9 이상 (Android 2.3 이상)
참고 : Android 이외의 Java를 지원하지 않습니다. Eclipse를 지원하지 않습니다.
Realm 오픈소스, 샘플
https://github.com/realm/realm-java
https://github.com/realm/realm-java/tree/master/examples
Realm 브라우저
https://realm.io/products/realm-studio/
Realm 플러그인 설치
ㆍ1 단계 : 프로젝트의 build.gradle 파일에 classpath 종속성을 추가합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.4.1' classpath "io.realm:realm-gradle-plugin:5.11.0" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } | cs |
ㆍ2 단계 : app의 build.gradle 파일의 맨 위에 realm-android 플러그인을 적용합니다.
1 2 | apply plugin: 'com.android.application' apply plugin: 'realm-android' | cs |
Realm 초기화
1 2 3 4 5 6 7 | public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Realm.init(this); } } | cs |
AndroidManifest.xml에 추가
1 2 3 4 | <application android:name=".MyApplication" ... /> | cs |
Realm 미리보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | // Realm 초기화(한 번만 초기화합니다) Realm.init(context); // RealmObject를 상속받아서 model 클래스 정의 public class Dog extends RealmObject { private String name; private int age; // ... Generated getters and setters ... } public class Person extends RealmObject { @PrimaryKey private long id; private String name; private RealmList<Dog> dogs; // List 정의 // ... Generated getters and setters ... } // this 스레드에 대한 Realm 인스턴스 생성 Realm realm = Realm.getDefaultInstance(); // 일반 Java 객체와 같이 사용합니다 Dog dog = new Dog(); dog.setName("Rex"); dog.setAge(1); // 2세 미만의 모든 Dog를 쿼리합니다. final RealmResults<Dog> puppies = realm.where(Dog.class).lessThan("age", 2).findAll(); puppies.size(); // => 아직 Realm에 Dog가 추가되지 않았으므로 0입니다. // 트랜잭션에서 데이터 insert realm.beginTransaction(); final Dog managedDog = realm.copyToRealm(dog); // 미리 만들어진 객체를 사용 Person person = realm.createObject(Person.class); // 객체를 직접 생성 person.getDogs().add(managedDog); realm.commitTransaction(); // 데이터가 변경되면 Listener에 알림 puppies.addChangeListener(new OrderedRealmCollectionChangeListener<RealmResults<Dog>>() { @Override public void onChange(RealmResults<Dog> results, OrderedCollectionChangeSet changeSet) { // 쿼리 결과는 실시간으로 업데이트됩니다. changeSet.getInsertions(); // => [0] is added. } }); // 백그라운드에서 비동기로 데이터 update realm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { Dog dog = bgRealm.where(Dog.class).equalTo("age", 1).findFirst(); dog.setAge(3); } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { // 원본 쿼리와 Realm 객체는 자동으로 업데이트 됩니다. puppies.size(); // => 2세 미만의 Dog가 없으므로 0입니다. managedDog.getAge(); // => 나이가 업데이트 됐으므로 3입니다. } }); | cs |
출처
https://realm.io/docs/java/latest