自动更新
Realm的Model的自动更新机制是比较有趣的特性,如下自动更新代码:
public void test() { realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { Dog myDog = realm.createObject(Dog.class); myDog.setName("Fido"); myDog.setAge(1); } }); Dog myDog = realm.where(Dog.class).equalTo("age", 1).findFirst(); LogDebug("dog age:" + myDog.getAge());// dog age:1 realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { Dog myPuppy = realm.where(Dog.class).equalTo("age", 1).findFirst(); myPuppy.setAge(2); } }); LogDebug("dog age:" + myDog.getAge());// dog age:2 }
public class Dog extends RealmObject { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
上述代码先在第一个executeTransaction中创建了myDog这个model实例,接着查询了到这条记录并返回myDog实例,在第二个executeTransaction中直接修改这条记录,最后打印这个myDog时会自动更新age的值。
在上面的源码中看不出端倪,那最大的可能就是在编译过程做了手脚。首先反编译apk,先看如下的反编译代码:
public void test() { this.realm