Realm 用法学习地址
1 Realm不支持内部类
2 Realm和GSON可以无缝的配合使用。
3 Realm库升级的方法:
-
创建迁移类
// 迁移类示例
public class MyMigration implements RealmMigration{
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
// DynamicRealm 暴露了一个可编辑的schema
RealmSchema schema = realm.getSchema();
// 迁移到版本 1 : 添加一个新的类
// 示例:
// public Person extends RealmObject {
// private String name;
// private int age;
// // getters and setters left out for brevity
// }
if (oldVersion == 0) {
schema.create("Person")
.addField("name", String.class)
.addField("age", int.class);
oldVersion++;
}
// 迁移到版本 2 :添加一个primary key + 对象引用
// 示例:
// public Person extends RealmObject {
// private String name;
// @PrimaryKey
// private int age;
// private Dog favoriteDog;
// private RealmList<Dog> dogs;
// // getters and setters left out for brevity
// }
if (oldVersion == 1) {
schema.get("Person")
.addField("id", long.class, FieldAttribute.PRIMARY_KEY)
.addRealmObjectField("favoriteDog", schema.get("Dog"))
.addRealmListField("dogs", schema.get("Dog"));
oldVersion++;
}
}
}
-
使用
Builder.migration
升级数据库将版本号改为2,当Realm发现新旧版本号不一致时,会自动使用该迁移类完成迁移操作。
RealmConfiguration config = new RealmConfiguration.Builder()
.schemaVersion(2) // 在schema改变后,必须进行升级
.migration(new MyMigration()) // 开始迁移
.build()
4 不能直接使用查询出来的对象类
我们得到了一个符合查询条件的对象列表的引用,但是如果我们直接操作,对象将会是原始的对象。所以,还是复制一份吧。
ArrayList array = realm. copyFromRealm(result2);