Android 无法在ForeignCollection或MLite中创建数据元素
我有接触班和小组课。每个联系人可以在多个组中,一个组可以有很多联系人。我的班级:Android 无法在ForeignCollection或MLite中创建数据元素,android,ormlite,foreign-collection,foreign-data-wrapper,Android,Ormlite,Foreign Collection,Foreign Data Wrapper,我有接触班和小组课。每个联系人可以在多个组中,一个组可以有很多联系人。我的班级: @DatabaseTable(tableName = "contacts") public class ContactItem implements Parcelable{ private static final long serialVersionUID = 1L; @DatabaseField(generatedId = true) private Integer id; @D
@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;
}
如何解决此问题?在这种情况下,我解决了问题:
public void saveNonExistingGroupContacts(GroupItem group, ArrayList<ContactItem> contacts)
{
DatabaseHandler db = new DatabaseHandler(context.getApplicationContext());
Dao<GroupItem,Integer> daoGroup = null;
Dao<ContactItem,Integer> daoContact = null;
GroupItem newGroup;
try {
daoGroup = db.getGroupDao();
daoContact= db.getContactDao();
UpdateBuilder<ContactItem, Integer> contactUpdateBuilder = daoContact.updateBuilder();
UpdateBuilder<GroupItem, Integer> groupUpdateBuilder = daoGroup.updateBuilder();
daoGroup.createIfNotExists(group);
newGroup = daoGroup.queryForId(group.getId());
ForeignCollection<ContactItem> fAp =
daoGroup.getEmptyForeignCollection(Constants.GROUP_CONTACTS_LIST);
for (ContactItem contact: contacts)
{
contact.setContactGroup(group);
newGroup.setContact(contact);
newGroup.setCount(newGroup.getCount()+1);
contactUpdateBuilder.updateColumnValue(Constants.CONTACT_GROUP,newGroup);
groupUpdateBuilder.updateColumnValue(Constants.GROUP_CONTACT,contact);
}
contactUpdateBuilder.update();
groupUpdateBuilder.update();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void saveNonExistingGroupContacts(GroupItem组,ArrayList contacts)
{
DatabaseHandler db=新的DatabaseHandler(context.getApplicationContext());
Dao-daoGroup=null;
Dao-daoscontact=null;
GroupItem新组;
试一试{
daoGroup=db.getGroupDao();
daoContact=db.getContactDao();
UpdateBuilder contactUpdateBuilder=daoContact.UpdateBuilder();
UpdateBuilder组UpdateBuilder=daoGroup.UpdateBuilder();
daoGroup.createIfNotExists(组);
newGroup=daoGroup.queryForId(group.getId());
国外收藏=
daoGroup.getEmptyForeignCollection(Constants.GROUP\u CONTACTS\u LIST);
用于(联系人项目联系人:联系人)
{
contact.setContactGroup(组);
newGroup.setContact(contact);
newGroup.setCount(newGroup.getCount()+1);
contactUpdateBuilder.updateColumnValue(常数.CONTACT\u组,newGroup);
groupUpdateBuilder.updateColumnValue(Constants.GROUP\u CONTACT,CONTACT);
}
contactUpdateBuilder.update();
groupUpdateBuilder.update();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
嗯,你到底改变了什么?为什么?我也犯了同样的错误。你没有回答Scott提出的问题,而且修复方案也无法立即理解,没有任何评论或解释,我认为这个答案最差。
java.lang.IllegalStateException: Could not create data element in dao
public void saveNonExistingGroupContacts(GroupItem group, ArrayList<ContactItem> contacts)
{
DatabaseHandler db = new DatabaseHandler(context.getApplicationContext());
Dao<GroupItem,Integer> daoGroup = null;
Dao<ContactItem,Integer> daoContact = null;
GroupItem newGroup;
try {
daoGroup = db.getGroupDao();
daoContact= db.getContactDao();
UpdateBuilder<ContactItem, Integer> contactUpdateBuilder = daoContact.updateBuilder();
UpdateBuilder<GroupItem, Integer> groupUpdateBuilder = daoGroup.updateBuilder();
daoGroup.createIfNotExists(group);
newGroup = daoGroup.queryForId(group.getId());
ForeignCollection<ContactItem> fAp =
daoGroup.getEmptyForeignCollection(Constants.GROUP_CONTACTS_LIST);
for (ContactItem contact: contacts)
{
contact.setContactGroup(group);
newGroup.setContact(contact);
newGroup.setCount(newGroup.getCount()+1);
contactUpdateBuilder.updateColumnValue(Constants.CONTACT_GROUP,newGroup);
groupUpdateBuilder.updateColumnValue(Constants.GROUP_CONTACT,contact);
}
contactUpdateBuilder.update();
groupUpdateBuilder.update();
}
catch(Exception e)
{
e.printStackTrace();
}
}