运行kotlin realm demo canot

时间:2016-03-07 02:46:42

标签: realm kotlin

kotlin版本1.0.0,领域版本0.88.0-SNAPSHOT 我下载了realm kotlin demo,然后运行 如果这样的代码:

    var person = Person()
    person.id = 1
    person.name = "Young Person"
    person.age = 14
    realm.beginTransaction()
    realm.copyToRealm(person)
    realm.commitTransaction()

抛出异常:引起:java.lang.ClassCastException:io.realm.examples.kotlin.model.Person无法强制转换为io.realm.PersonRealmProxyInterface

否则我改变了这样的代码:

    realm.beginTransaction()
    // Add a person
    var person = realm.createObject(Person::class.java)
    person.id = 1
    person.name = "Young Person"
    person.age = 14
    // When the transaction is committed, all changes a synced to disk.
    realm.commitTransaction()

然后领域插入一个数据,但是person.name,id,age是空值或0;

如何解决它

1 个答案:

答案 0 :(得分:3)

使用Realm 0.88.0-SNAPSHOT,您还必须使用他们的Gradle插件。如果你谷歌这个例外(realm java.lang.ClassCastException ProxyInterface),你会发现这个Github Issue - 2353说:

  

我们刚刚将字节码weaver合并到master中,听起来好像没有在你的情况下被触发。请注意,从0.88.0-SNAPSHOT开始,您必须使用我们的Gradle插件:https://realm.io/news/android-installation-change/

以前你会安装Realm,如:

repositories {
    jcenter()
}

dependencies {
    compile 'io.realm:realm-android:<version>'
}

现在您必须安装它以包含Gradle插件:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "io.realm:realm-gradle-plugin:<version>"
    }
}

apply plugin: 'realm-android'

这样就可以打开字节码编织。如果没有这个,您会收到与第一个用例完全相同的错误(这是正确的代码,但对于您选择使用的快照版本,您还需要Gradle插件的这一额外步骤)。上面的链接中还有其他重要说明,以及最近版本的Realm的更改发布说明。