我没有开始使用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'
}
答案 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
,一切都会正常工作。