Realm.io无法获得实例

时间:2014-10-09 07:12:07

标签: java android realm

我没有开始使用Realm.io,我已经在我自己的项目中尝试了它以及IntroExample。

当我尝试查找某些内容时,我得到:

  

java.lang.IllegalStateException:读取事务期间的可变方法调用。

当我尝试存储某些东西时,我得到:

  

io.realm.exceptions.RealmException:找不到生成的代理   类

我似乎在某处有一个根本性的缺陷。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "lorem.ipsum"
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'org.jsoup:jsoup:1.8.+'
    compile 'io.realm:realm-android:0.71.0'
}

4 个答案:

答案 0 :(得分:7)

为您的模型类制作@RealmClass注释。我在同样的问题上挣扎,并且在Realm的代理类生成中更深入一些。仅生成具有@RealmClass注释的类。

@RealmClass
public class Category extends RealmObject {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

答案 1 :(得分:4)

我尝试运行您的示例代码并获得了很多关于您的模型类的例外。看起来您的getter和setter已经从默认设置重命名,默认情况下会破坏注释处理器。

我尝试将模型类更改为:

public class DataItem extends RealmObject {
    private String uuid;
    private String content;
    private boolean bool;

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public boolean isBool() {
        return bool;
    }

    public void setBool(boolean bool) {
        this.bool = bool;
    }
}

似乎有用。

答案 2 :(得分:2)

答案https://stackoverflow.com/a/26294208/1251958和答案https://stackoverflow.com/a/26326314/1251958的组合可以带来成功。

添加@RealmClass注释@Philluxx后,我在AndroidStudio中遇到错误,指出了@ChristianMelchior提到的所需语法

注意:您可能必须清除应用程序数据,因为忽略这样做似乎会导致数据库损坏导致后续崩溃。

答案 3 :(得分:1)

来自Realm的Emanuele。

我看了一下您在评论中发布的示例项目,我发现的唯一问题是在getter和setter的命名中。 我们当然需要更好地记录这一点,但为了轻松获得可预测的行为,您应该让IDE自动为您生成getter和setter。关于布尔值的一个注释:看起来如果你有一个布尔密码isValid,Android Studio将生成名为isValid()setValid()的访问者。我不确定Eclipse在同一场景中的表现如何。无论如何,在注释处理器中,我们生成类似isIsValid()setIsValid()的内容,这当然很难看,很快就会修复。无论如何,如果你简单地命名你的布尔valid,一切都会正常工作。