2013-08-17 16 views
2

我有聯繫人和組類。每個聯繫人可以在多個組中,一個組可以有很多聯繫人。我的課:無法在ForeignCollection中創建數據元素ORMLite

@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 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(); 
       } 
} 

,但得到的

java.lang.IllegalStateException: Could not create data element in dao 

如何解決這個?

回答

0

我解決了我在這種情況下問題:

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(); 
       } 

      } 
+0

謝謝編輯) –

+0

呃,究竟你改變,爲什麼?我收到了同樣的錯誤。 –

+0

您沒有回覆斯科特發佈的問題,修復程序無法立即理解,也沒有任何評論和解釋,我會將這個答案評爲最差。 – Sergiob