2014-10-09 79 views
3

我無法開始使用Realm.io,我在自己的項目中以及IntroExample中嘗試了它。Realm.io無法獲得示例工作

當我試圖尋找一些東西,我得到:

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

沒有更多的信息很難說。你有什麼libs文件夾?你似乎也錯過了jcenter()的存儲庫定義,除非你在另一個文件中配置它? – 2014-10-09 09:59:30

+0

您能提供以下輸出: '。/ gradlew assemble' – Emanuelez 2014-10-09 10:55:31

+0

@ChristianMelchior我在我的libs文件夾中沒有任何東西。 jcenter()被定義爲父母的build.gradle文件。 – darken 2014-10-09 14:25:09

回答

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; 
    } 
} 

這似乎工作。

+0

如果它只需要特定名稱的getter和setter(完全依賴於IDE +配置),我不能添加額外的邏輯給getters和setter,這裏有什麼優勢?爲什麼不用公共領域創造一堂課,並擺脫一個可能會破壞的額外層。 – darken 2014-10-10 08:37:08

+0

目前,這是由於Realm底層將獲取者/設置者直接掛接到數據庫中的數據。查看* RealmProxy類獲取更多細節。但是,是的,如果很多人依靠代碼模板來生成setter/getters,那麼重新考慮這種方法可能是值得的。 – 2014-10-10 09:05:14

+0

@ChristianMelchior,在我的情況下,代理類沒有生成,我用'@ RealmClass'註釋了類,我也嘗試過使用JDK 1.8',清理/構建並重新啓動Android Studio和系統。 – 2015-12-22 22:04:10

1

Emanuele from Realm here。

我看了一下您在評論中發佈的示例項目,我發現的唯一問題是命名getter和setter。 我們當然需要更好地記錄它,但爲了輕鬆獲得可預測的行爲,您應該讓IDE爲您自動生成getter和setter。關於布爾值的一個注意事項:它看起來,如果你有一個布爾值callaed isValid Android Studio將生成名爲isValid()setValid()的訪問器。我不確定Eclipse在同一場景中的表現如何。無論如何,在註釋處理器中,我們會生成類似isIsValid()setIsValid()的東西,這當然很醜,很快就會修復。無論如何,如果你簡單地命名你的布爾值valid一切都會正常工作。

+0

getters和setter實際上是由Android工作室生成的。如果您引用缺少的「m」,那是因爲您可以在代碼生成模板中指定一個命名前綴。 – darken 2014-10-10 08:32:27

+0

@Emanuelez,我剛剛下載了最新版本的Realm for Android,將介紹示例導入到Android Studio(v0.8.6)並運行它。 「Person person = realm.createObject(Person.class);' – 2014-10-10 10:39:56

6

爲您的模型類添加一個@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; 
    } 
} 
+0

'行中的」無法找到生成的代理類「異常導致該應用程序崩潰;感謝在添加註釋之後,我收到了錯誤,指出了提及的非確認語法由他人。 – darken 2014-10-13 03:40:27

+0

仍然沒有生成代理類,可能是什麼原因? – 2015-12-22 22:00:22