Class关系,NullPointerException错误
Class relationship, NullPointerException error
我有两个 类 作者和书籍:
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);
有什么问题吗?我请求你的帮助。
根据 Realm 文档,您应该使用特殊工厂方法实例化实体对象:
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
)。
您还没有为您的作者对象设置 books
成员(因为 books
没有被初始化,它是 null
)所以 getBooks()
将 return一个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 在上面的解决方案中正确指出的那样,该列表将不受管理。如果您想要托管列表传递 RealmList
api 中指定的必需参数,但无论您选择什么,都必须在开始操作之前初始化书籍列表
我有两个 类 作者和书籍:
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);
有什么问题吗?我请求你的帮助。
根据 Realm 文档,您应该使用特殊工厂方法实例化实体对象:
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
)。
您还没有为您的作者对象设置 books
成员(因为 books
没有被初始化,它是 null
)所以 getBooks()
将 return一个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 在上面的解决方案中正确指出的那样,该列表将不受管理。如果您想要托管列表传递 RealmList
api 中指定的必需参数,但无论您选择什么,都必须在开始操作之前初始化书籍列表