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