【问题标题】:kotlin realm demo canot be runkotlin 领域演示无法运行
【发布时间】:2016-03-07 02:46:42
【问题描述】:

kotlin 版本 1.0.0,realm 版本 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()

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

如何解决

【问题讨论】:

  • 克隆realm-java项目后,先尝试在项目根目录下运行/gradlew installRealmJava。然后构建示例。
  • 你没有显示你的 Person 类,很高兴看到。

标签: realm kotlin


【解决方案1】:

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

我们刚刚将我们的字节码编织器合并到 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 最新版本更改的发行说明。

【讨论】:

  • 我添加了classpath "io.realm:realm-gradle-plugin:&lt;version&gt;"apply plugin: 'realm-android' 但有时像Error:Gradle: Execution failed for task ':app:transformClassesWithJarMergingForDebug'. &gt; com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: io/realm/annotations/Ignore.class 这样的错误是Index.class,我发现:[link](github.com/realm/realm-java/issues/1545) 和link 但无法解决它,帮助,谢谢
  • 你能开始一个新问题吗,你需要包括你的依赖列表,以及 gradle dependencies 命令的输出,因为它会显示另一个 Realm 库副本中还有什么。此处无法在 cmets 中解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多