I have contact and group classes. Each contact can be in many groups and one group can have a lot of contacts. My classes:
@DatabaseTable(tableName = "contacts")
public class ContactItem implements Parcelable{
private static final long serialVersionUID = 1L;
@DatabaseField(generatedId = true)
private Integer id;
@DatabaseField(dataType = DataType.STRING, columnName = Constants.CONTACT_NAME)
private String name;
@DatabaseField(dataType = DataType.STRING, columnName = Constants.CONTACT_NUMBER)
private String number;
@DatabaseField(dataType = DataType.INTEGER, columnName = Constants.CONTACT_ICON)
private int icon;
@DatabaseField(dataType = DataType.INTEGER, columnName = Constants.CONTACT_DAYS)
private int days;
@DatabaseField(foreign=true,canBeNull = true,foreignAutoRefresh = true,columnName = Constants.CONTACT_GROUP)
private GroupItem group;
@ForeignCollectionField(columnName = Constants.CONTACT_GROUP_LIST)
}
@DatabaseTable(tableName = "groups")
public class GroupItem implements Parcelable{
@DatabaseField(generatedId = true)
private Integer id;
@DatabaseField(dataType = DataType.STRING, columnName = Constants.GROUP_NAME)
private String name;
@DatabaseField(dataType = DataType.INTEGER, columnName = Constants.GROUP_ICON)
private int icon;
@DatabaseField(dataType = DataType.INTEGER, columnName = Constants.GROUP_COUNT)
private int count;
@DatabaseField(foreign=true,canBeNull = true,foreignAutoRefresh = true, columnName = Constants.GROUP_CONTACT)
private ContactItem contact;
@ForeignCollectionField(eager = true, columnName=Constants.GROUP_CONTACTS_LIST)
private ForeignCollection<ContactItem> contacts;
}
And when I need to add list of contacts to the specified group I do something like that :
public void saveGroupContacts(GroupItem group, ArrayList<ContactItem> contacts)
{
DatabaseHandler db = new DatabaseHandler(context.getApplicationContext());
Dao<GroupItem,Integer> daoGroup = null;
GroupItem newGroup;
try {
daoGroup = db.getGroupDao();
UpdateBuilder<GroupItem, Integer> updateBuilder = daoGroup.updateBuilder();
newGroup = daoGroup.queryForId(group.getId());
Log.i(" received group from database", newGroup.toString());
ForeignCollection<ContactItem> fAp =
daoGroup.getEmptyForeignCollection(Constants.GROUP_CONTACTS_LIST);
Log.i("foreign coll size", Integer.toString(fAp.size()));
for (ContactItem contact: contacts)
{
Log.i("contact to save in group", contact.toString());
contact.setContactGroup(group);
group.setContact(contact);
fAp.add(contact);
}
daoGroup.update(newGroup);
}
catch(Exception e)
{
e.printStackTrace();
}
}
but get the
java.lang.IllegalStateException: Could not create data element in dao
How can I fix this?
I solved my issue in this case: