Android项目中的升级域
我目前正在我的一个Android项目中运行Realm版本0.82.0。我有很长一段时间没有接触Realm,直到最近我注意到它们同时升级到了2.0.2版。我想升级我的Realm版本,不幸的是,我不知道从我的旧版本升级到当前版本是否有效或破坏了我的代码 我特别关心迁移,因为迁移的API在我编写代码之后似乎有了一些变化,我不确定如果我只是更新版本,迁移是否会中断。不幸的是,他们的网页上没有关于升级领域版本的文档Android项目中的升级域,android,realm,Android,Realm,我目前正在我的一个Android项目中运行Realm版本0.82.0。我有很长一段时间没有接触Realm,直到最近我注意到它们同时升级到了2.0.2版。我想升级我的Realm版本,不幸的是,我不知道从我的旧版本升级到当前版本是否有效或破坏了我的代码 我特别关心迁移,因为迁移的API在我编写代码之后似乎有了一些变化,我不确定如果我只是更新版本,迁移是否会中断。不幸的是,他们的网页上没有关于升级领域版本的文档 是否有人有升级领域的经验,特别是在两个主要版本的基础上增加了一个版本?在他们的Github
是否有人有升级领域的经验,特别是在两个主要版本的基础上增加了一个版本?在他们的Github上,可以在中找到突破性的更改列表 然而,值得注意的是,在路上有很多突破性的变化,特别是0.89.0 从
0.82.0
到5.1.0
的版本如下(这是目前最稳定的版本):
0.82.0:
RealmResults<Stuff> stuffs = realm.where(Stuff.class).equalTo("something", false).findAll();
for(Stuff stuff : stuffs) {
stuff.setSomething(true);
}
突破性更改:注释为@PrimaryKey的字段现在会自动索引。旧模式需要迁移
(0.82.2在这里最稳定,但在黑莓设备上不起作用。在黑莓上使用的第一个稳定版本是0.87.2。)
在0.86.0+中,可以使用
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
// version check and stuff
RealmObjectSchema personSchema = schema.get("Person");
personSchema.addIndex("fieldName");
0.83:
RealmResults<Stuff> stuffs = realm.where(Stuff.class).equalTo("something", false).findAll();
for(Stuff stuff : stuffs) {
stuff.setSomething(true);
}
中断更改:数据库文件格式更新。此版本创建的领域文件不能由早期版本的领域使用
破坏性更改:从领域类中删除了不推荐使用的方法和构造函数
中断更改:引入了装箱类型:布尔型、字节型、短型、整数型、长型、浮点型和双精度型。添加了空支持。引入注释@Required以指示字段不可为空。默认情况下,字符串、日期和字节[]可为空,这意味着如果打开域文件的早期版本,将引发RealmMigrationEndexception
哦,孩子,这是一个很好的。空支持
基本体的装箱类型可用。默认情况下,装箱类型可为空。所有字符串
、日期
和字节[]
必须使用@Required
或schema.setNullable(“fieldName”,nullable)
进行注释,并使它们都可以为Null
0.84.0:
添加了异步查询。就模式而言,这里没有什么新东西
0.85.0:
中断更改:已删除RealMencryOptionNotSupportedException,因为域的底层存储引擎中的加密实现已更改。现在所有设备都支持加密
中断更改:Realm.executeTransaction()现在直接抛出任何RuntimeException,而不是将其包装在RealMeException(#1682)中
中断更改:如果字段名是链接字段,并且最后一个元素是链接(#1693),则RealmQuery.isNull()和RealmQuery.isNotNull()现在抛出IllegalArgumentException而不是RealmError
虽然:
如果值包含无效(非托管、已移除、已关闭、来自不同领域)对象(#1749),则RealmObject和RealmList的托管对象中的setter现在会引发IllegalArgumentException
这个很有趣。以前它只是失败了,所以这是最好的。但这也是该领域最大的限制
0.86.0:
RealmResults<Stuff> stuffs = realm.where(Stuff.class).equalTo("something", false).findAll();
for(Stuff stuff : stuffs) {
stuff.setSomething(true);
}
突破性更改:迁移API已被新API替换
中断更改:RealmResults.SORT\u ORDER\u升序和RealmResults.SORT\u ORDER\u降序常量已替换为SORT.升序和SORT.DESCENDING枚举
中断更改:RealmQuery.CASE_敏感和RealmQuery.CASE_不敏感常量已替换为CASE.SENSITIVE和CASE.SENSITIVE枚举
中断更改:Realm.addChangeListener、RealmObject.addChangeListener和RealmResults.addChangeListener持有对侦听器的强引用,应注销侦听器以避免内存泄漏
破坏性更改:删除了不推荐的方法RealmQuery.minimum{Int,Float,Double},RealmQuery.maximum{Int,Float,Double},RealmQuery.sum{Int,Float,Double}和RealmQuery.average{Int,Float,Double}。改为使用RealmQuery.min()、RealmQuery.max()、RealmQuery.sum()和RealmQuery.average()
中断更改:删除了错误为公共的RealmConfiguration.getSchemaMediator()。另外还添加了RealmConfiguration.getRealMobjectClass()以获得模型类集(#1797)
中断更改:Realm.addChangeListener、RealmObject.addChangeListener和RealmResults.addChangeListener在非循环线程上调用时将抛出非法状态异常。这是为了防止注册不会被调用的侦听器
使用DynamicRealm和DynamicRealmObject添加了新的动态API
添加了Realm.getSchema()和DynamicRealm.getSchema()
这个
有些内容已重命名,如果结果集仍然有效,则应该注销更改侦听器。但值得注意的是,您仍然应该为RealmResults
保留一个字段变量,因为Realm的上下文对它的引用很弱
0.87.0:
RealmResults<Stuff> stuffs = realm.where(Stuff.class).equalTo("something", false).findAll();
for(Stuff stuff : stuffs) {
stuff.setSomething(true);
}
接收支持。没什么重要的
0.87.2:
RealmResults<Stuff> stuffs = realm.where(Stuff.class).equalTo("something", false).findAll();
for(Stuff stuff : stuffs) {
stuff.setSomething(true);
}
提交事务时删除了显式GC调用(#1925)
最后,王国又稳定下来了!:)
0.88.0:
RealmResults<Stuff> stuffs = realm.where(Stuff.class).equalTo("something", false).findAll();
for(Stuff stuff : stuffs) {
stuff.setSomething(true);
}
突破性变化
Realm现在必须作为Gradle插件安装
现在,dynamicrelm.executeTransaction()直接抛出任何RuntimeException,而不是将其包装在RealMeException(#1682)中
dynamicrelm.executeTransaction()现在抛出IllegalArgumentException,而不是静默acc
#realm older than 0.84.1
-keepnames public class * extends io.realm.RealmObject
-keep @io.realm.annotations.RealmModule class *
-keep class io.realm.** { *; }
-dontwarn javax.**
-dontwarn io.realm.**
#realm 0.84.1+ and older than 1.0.0
-keep class io.realm.annotations.RealmModule
-keep @io.realm.annotations.RealmModule class *
-keep class io.realm.internal.Keep
-keep @io.realm.internal.Keep class *
-dontwarn javax.**
-dontwarn io.realm.**
#realm 0.89.0+ and older than 1.0.0
-keep class io.realm.RealmCollection
-keep class io.realm.OrderedRealmCollection
#realm 3.2.0 and 3.2.1
-keepnames public class * extends io.realm.RealmObject
realm.where(example.class)
.findAllSorted("field")
realm.where(example.class)
.sort("field")
.findAll();