Stepan Stepan - 1 year ago 76
Android Question

How make relationship between two entities - Sugar ORM

I use Sugar ORM in my Android app and I would like to know how to make relationship between entities. The thing I would like to is to have more emails and phone numbers (work, personal, home)

I have tried this:

I can add it like this..

Contact contact = new Contact();
ContactItem contactItem = new ContactItem();

but when I want to load, I have an error. Class cannot be read from Sqlite3 database.


public class Contact extends SugarRecord {

private String name;
private String phoneNumber;
private String email;
private boolean favourite;
private String imagePath;
@Ignore private boolean visibleFirstLetter;

public List<ContactItem> items;

public Contact() {
//empty constructor

public Contact(String name, String number, String email, boolean favourite, String imagePath) { = name;
this.phoneNumber = number; = email;
this.favourite = favourite;
this.imagePath = imagePath;
this.items = new ArrayList<>();

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

public void setEmail(String email) { = email;

public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;

public void setFavourite(Boolean favourite) {
this.favourite = favourite;

public void setVisibleFirstLetter(Boolean visibleFirstLetter) {
this.visibleFirstLetter = visibleFirstLetter;
public String getName() {
return name;

public String getEmail() { return email; }

public String getPhoneNumber() {
return phoneNumber;

public boolean isFavourite() { return favourite; }

public boolean isVisibleFirstLetter() {
return visibleFirstLetter;

public String getImagePath() { return imagePath; }

public void setImagePath(String imagePath) { this.imagePath = imagePath; }

public List<ContactItem> getItems() {
return items;


public class ContactItem {

String content;
Integer type;
Contact contact;

public static final Integer HOME = 0;
public static final Integer WORK = 1;
public static final Integer EMAIL = 2;
public static final Integer FAX = 3;

public ContactItem() {
//empty constructor
public ContactItem(Integer type, String content) {
this.type = type;
this.content = content;

public void setType(Integer type) {
this.type = type;

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

public String getContent() { return content; }

public Integer getType() { return type; }

public Contact getContact() { return contact; }

public void setContact(Contact contact) { = contact; }

Answer Source

Generally, you should be initialized Contact before find or update this. Can be Contact have method getName() is null.

In this case, Model.Contact.getName()is a null object reference.

So, you should check my code:

Contact contact = new Contact("Stepan", "09293293",, true);;
Contact contact = SugarRecord.findById(Contact.class, (long) 1);


You should tried with code to load all contacts, this seem like findById but it get all rows in Contact:

List<Contact> contacts = SugarRecord.listAll(Contact.class);

In the debugger Android Studio, please watch all values. Can be any incorrect in your data.