IndexOutOfBoundsException异常更新的联系人列表中的联系人时 - 黑莓
问题描述:
软件和模拟器版本我使用IndexOutOfBoundsException异常更新的联系人列表中的联系人时 - 黑莓
BlackBerry智能手机模拟器:2.13.0.65
黑莓软件版本5.0.0_5.0.0.14
我我正在修改联系人。以下是我使用的代码片段。 我在行
String wtel = blackBerryContact.getString(BlackBerryContact.TEL, supportedAttributes[i]);
得到一个IndexOutOfBounds异常可有人建议是怎么回事错在这里。以下是代码片段
.....
// Load the addressbook and let the user choose from list of contact
BlackBerryContactList contactList = (BlackBerryContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST,PIM.READ_WRITE);
PIMItem pimItem = contactList.choose();
BlackBerryContact blackBerryContact = (BlackBerryContact)pimItem;
PIMList pimList = blackBerryContact.getPIMList();
// get the supported attributes for Contact.TEL
int[] supportedAttributes = pimList.getSupportedAttributes(Contact.TEL);
Dialog.alert("Supported Attributes "+supportedAttributes.length); // gives me 8
for (int i=0; i < supportedAttributes.length;i++){
if(blackBerryContact.ATTR_WORK == supportedAttributes[i]){
Dialog.alert("updating Work"); // This alert is shown
Dialog.alert("is supported "+ pimList.isSupportedAttribute(BlackBerryContact.TEL, supportedAttributes[i])+" "+pimList.getAttributeLabel(supportedAttributes[i])); // shows true and work
String wtel = blackBerryContact.getString(BlackBerryContact.TEL, supportedAttributes[i]); // I get a IndexOutOfBounds Exception here
if(wtel != ""){
pimItem.removeValue(BlackBerryContact.TEL, supportedAttributes[i]);
}
pimItem.addString(Contact.TEL, BlackBerryContact.ATTR_WORK, number); // passing the number that has to be updated
if(pimItem.isModified()) {
pimItem.commit();
Dialog.alert("Updated Work Number");
}
}
}
.....
我要更新所有Contact.TEL领域的支持的属性
Field Values Per Field Supported Attributes
-----------------------------------------------------------------------------
Contact.TEL 8 Contact.ATTR_WORK, Contact.ATTR_HOME,
Contact.ATTR_MOBILE, Contact.ATTR_PAGER,
Contact.ATTR_FAX, Contact.ATTR_OTHER,
Contact.ATTR_HOME2, Contact.ATTR_WORK2
答
读联系电话。
int number = contact.countValues(BlackBerryContact.TEL);
Hashtable multipleContactNumbers = new Hashtable();
for (int i = 0; i < number; i++) {
if (contact.getAttributes(BlackBerryContact.TEL, i) == BlackBerryContact.ATTR_WORK) {
multipleContactNumbers.put("Work: ", contact.getString(
BlackBerryContact.TEL, i));
} else if (contact.getAttributes(BlackBerryContact.TEL, i) == BlackBerryContact.ATTR_WORK2) {
multipleContactNumbers.put("Work 2: ", contact.getString(
BlackBerryContact.TEL, i));
} else if (contact.getAttributes(BlackBerryContact.TEL, i) == BlackBerryContact.ATTR_HOME) {
multipleContactNumbers.put("Home: ", contact.getString(
BlackBerryContact.TEL, i));
} else if (contact.getAttributes(BlackBerryContact.TEL, i) == BlackBerryContact.ATTR_HOME2) {
multipleContactNumbers.put("Home 2: ", contact.getString(
BlackBerryContact.TEL, i));
} else if (contact.getAttributes(BlackBerryContact.TEL, i) == BlackBerryContact.ATTR_MOBILE) {
multipleContactNumbers.put("Mobile: ", contact.getString(
BlackBerryContact.TEL, i));
} else if (contact.getAttributes(BlackBerryContact.TEL, i) == BlackBerryContact.ATTR_OTHER) {
multipleContactNumbers.put("Other: ", contact.getString(
BlackBerryContact.TEL, i));
}
}
添加新的联系号码。
contact.addString(Contact.TEL, Contact.ATTR_HOME, "5555550100");
contact.addString(Contact.TEL, Contact.ATTR_WORK, "5555550103");
contact.addString(Contact.TEL, BlackBerryContact.ATTR_WORK2, "5555550104");
更新联系号码。
int telCount = contact.countValues(Contact.TEL);
for (int i = 0; i < telCount; ++i)
{
int telAttrs = contact.getAttributes(Contact.TEL, i);
if ((telAttrs & Contact.ATTR_MOBILE) != 0)
{
contact.setString(Contact.TEL, i, Contact.ATTR_MOBILE, "5555550109");
break;
}
}
嗨Vivart contact.countValues(BlackBerryContact.TEL)返回用户当前在他的卡上的联系人。例如,如果用户没有传真号码,则我们无法更新传真号码。还要考虑一种情况,用户没有任何联系号码,只有名称,然后contact.countValues(BlackBerryContact.TEL)返回0,代码将永远不会进入循环。 我在看什么是更新用户的任何联系人号码。 请告知 – Taha 2010-05-13 05:26:45
看我更新的帖子。 – Vivart 2010-05-13 06:44:17
嗨Vivart,你没有得到我。考虑以下事项 - 联系人有8个可能的属性。目前有2个联系人,Contact.ATTR_HOME和Contact.ATTR_WORK当我们说contact.countValues(Contact.TEL);它返回2,因为联系人只有2个号码。在这里,我将无法检查并添加/更新其他nos,因为它在循环中不可用。我尝试的逻辑获取联系人的所有支持的属性变量supportedAttributes具有8个属性的所有int值也“for循环中的if(blackBerryContact.ATTR_WORK == supportedAttributes [i]){”为真 – Taha 2010-05-13 11:16:53