Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android项目中的升级域_Android_Realm - Fatal编程技术网

Android项目中的升级域

Android项目中的升级域,android,realm,Android,Realm,我目前正在我的一个Android项目中运行Realm版本0.82.0。我有很长一段时间没有接触Realm,直到最近我注意到它们同时升级到了2.0.2版。我想升级我的Realm版本,不幸的是,我不知道从我的旧版本升级到当前版本是否有效或破坏了我的代码 我特别关心迁移,因为迁移的API在我编写代码之后似乎有了一些变化,我不确定如果我只是更新版本,迁移是否会中断。不幸的是,他们的网页上没有关于升级领域版本的文档 是否有人有升级领域的经验,特别是在两个主要版本的基础上增加了一个版本?在他们的Github

我目前正在我的一个Android项目中运行Realm版本0.82.0。我有很长一段时间没有接触Realm,直到最近我注意到它们同时升级到了2.0.2版。我想升级我的Realm版本,不幸的是,我不知道从我的旧版本升级到当前版本是否有效或破坏了我的代码

我特别关心迁移,因为迁移的API在我编写代码之后似乎有了一些变化,我不确定如果我只是更新版本,迁移是否会中断。不幸的是,他们的网页上没有关于升级领域版本的文档


是否有人有升级领域的经验,特别是在两个主要版本的基础上增加了一个版本?

在他们的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();