2015-04-01 68 views
1

我有兩個類作者和圖書的:類關係,NullPointerException異常錯誤

public class Authors extends RealmObject { 
    @PrimaryKey 
    private String url_base; 
    private RealmList<Books> books; 
    ... getters & setters... 
    public RealmList<Books> getBooks() { 
     return books; 
    } 
    public void setBooks(RealmList<Books> books) { 
     this.books = books; 
    } 
} 

public class Books extends RealmObject { 
     @PrimaryKey 
    private String url_base; 
    private Authors author; 
     ... getters & setters... 
    public Authors getAuthor() { 
     return author; 
    } 
    public void setAuthor(Authors author) { 
     this.author = author; 
    } 
} 

執行插入:

Authors author = new Authors(); 
author.setUrl_base("url_base") 

Books book = new Books(); 
book.setUrl_base("lala"); 
book.setAuthor(author); 

author.getBooks().add(book);  // error comes here 

realm.beginTransaction(); 
realm.copyToRealmOrUpdate(author); 
realm.commitTransaction(); 

而且程序提供了顯示java.lang.NullPointerException。

錯誤行:author.getBooks()。Add(book);

什麼可能是錯的?我請求你的幫助。

+0

提供您的getter和setter方法的代碼爲兩個類 – Kushal 2015-04-01 07:17:54

+0

更新問題 – SmallSani 2015-04-01 07:28:00

+0

貌似前你的getBooks返回null,請檢查你在哪裏設置書籍作者。 – Satty 2015-04-01 07:32:40

回答

3

您沒有設置books成員爲您author對象(如books未初始化它是null),所以getBooks()將返回null

確保books使用之前被初始化:

public class Authors extends RealmObject { 
    @PrimaryKey 
    private String url_base; 
    private RealmList<Books> books = new RealmList<Books>(); // An empty unmanaged books list. 
    ... getters & setters... 

,或者使用setter方法(雖然初始化它的建設將是在這種情況下更正確):

Authors author = new Authors(); 
author.setUrl_base("url_base") 
author.setBooks(new RealmList<Book>()); 

更新:

由於@AndreyAtapin在上述解決方案中正確指出,該列表將被非託管。如果你想有一個管理列表傳遞所需的參數作爲RealmListapi規定,但無論你選擇的書籍列表必須初始化你開始操縱它

+0

通常這是在Java中正確的,但不是特定於領域。用構造函數創建一個'RealmList'給你一個非託管列表。 – 2015-04-01 07:43:59

+0

我明白你的意思了,我已經更新了相應的答案 – giorashc 2015-04-01 07:54:05

3

據境界的文檔,你應該實例化實體對象的特殊工廠方法:

realm.beginTransaction(); 
Authors author = realm.createObject(Authors.class); 
author.setUrl_base("url_base") 

Books book = realm.createObject(Books.class); 
book.setUrl_base("lala"); 
book.setAuthor(author); 

author.getBooks().add(book);  // error comes here 

realm.commitTransaction(); 

當你實例化構造的實體,顯然所有的字段都null默認:

public class Authors extends RealmObject { 
    @PrimaryKey 
    private String url_base;  // = null 
    private RealmList<Books> books; // = null 
    ... getters & setters... 
} 

PS :順便說一下,使用變量名稱url_base與Java編碼約定相矛盾。你最好稱它爲urlBase(相應地setUrlBase/getUrlBase)。

+0

是的!所以工作,但問題仍然與copyToRealmOrUpdate。如果所有的代碼運行幾次,那麼數據庫中的數據將被替換或添加爲新的? – SmallSani 2015-04-01 07:41:39

+0

啓動了一個程序2次。在第二次發佈throwDuplicatePrimaryKeyException – SmallSani 2015-04-01 07:42:44

+0

@SmallSani然後按照giorashc的解決方案 – 2015-04-01 07:48:49

相關問題