symbian名片夹里添加联系人信息的问题

grachel 2009-06-02 03:27:58
我自己写了几个函数实现添加联系人和读取联系人信息的功能,需要的信息主要有姓名、手机、家庭固定电话、工作固定电话、职位……内容,现在已经能够够实现将所有内容写入名片夹中,而且在写完之后直接读是没有问题的,但是当后来再调用读取联系人信息的程序读取时,职位跟工作固定电话的内容却无法读取出来,实在搞不懂是怎么回事了哦~~
添加联系人信息的代码:

{
CContactDatabase* contactsDb = CContactDatabase::OpenL();
CleanupStack::PushL(contactsDb);
CContactItem* newItem = contactsDb->CreateOwnCardL();
CleanupStack::PushL(newItem);
TInt fieldIndex = newItem->CardFields().Find(KUidContactFieldVCardMapWORK);
if(fieldIndex != -1)
{
newItem->CardFields()[fieldIndex].TextStorage()->SetTextL(*tempValue);
TBuf<XF_MAX_ADDRESSBOOKITEM_LEN> temptName;
temptName = modifiableItem->CardFields()[fieldIndex].TextStorage()->Text().Left(11); //temptName可以正确读出
}
TContactItemId contactId = contactsDb->AddNewContactL(*newItem);
contactsDb->CloseContactL(contactId);
CleanupStack::PopAndDestroy(); //newItem
CleanupStack::PopAndDestroy(); //contactsDb
return contactId;
}

/*注:TUid KUidContactFieldVCardMapWORK={KIntContactFieldVCardMapWORK};
* TPtrC16* tempValue是要写入的电话号码值
*/
添加职位的代码与以上代码类似,只不过field的名称改为:KUidContactFieldJobTitle(TUid KUidContactFieldJobTitle={KUidContactFieldJobTitleValue};)

读取联系人信息的代码如下:

{
CContactDatabase* contactsDb = CContactDatabase::OpenL();
CleanupStack::PushL(contactsDb);
CContactItem* card = contactsDb->ReadContactL(contactId);
CleanupStack::PushL(card);
TInt location = card->CardFields().Find(KUidContactFieldVCardMapWORK);
if(location != KErrNotFound)
{
workNumber = card->CardFields()[location].TextStorage()->Text().Left(11);
}
contactsDb->CloseContactL(card->Id());
CleanupStack::PopAndDestroy(); // card
CleanupStack::PopAndDestroy(); // contactsDb
}

/*注:contactId为上面添加联系人后返回的Id号码*/
读取职位的代码与以上代码类似,也是要把field名称改为KUidContactFieldJobTitle
...全文
519 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen513562028 2010-10-18
  • 打赏
  • 举报
回复
field->AddFieldTypeL(KIntContactFieldVCardMapWORK);
好像不行,这句报错了! 我自己添加的时候,后面的联系人会把之前的联系人的电话号码累加起来,越往后的联系人的电话号码越多,请问这是问什么?
phoneBuf.Copy(GetName(_L("phone"),ptrItem)); // 这个是从文件解析得到电话号码
CEikonEnv::Static()->InfoWinL(_L("buf1"),phoneBuf);
//buf.Trim();
if (phoneBuf.Length()> 0)
{
field = CContactItemField::NewLC(KStorageTypeText,
KUidContactFieldPhoneNumber);

field->SetMapping(KUidContactFieldVCardMapTEL);

field->SetLabelL(KWorkPhoneLabel);

field->TextStorage()->SetTextL(phoneBuf);

contact->AddFieldL(*field);

CleanupStack::Pop();

} 这是我的代码 其他域没出现问题 只有电话号码出现问题
shiwl111 2010-03-15
  • 打赏
  • 举报
回复
用你的方法怎么会出现多添加了一条空白信息呢?
漁_夫 2009-06-03
  • 打赏
  • 举报
回复
mark
影子LEON 2009-06-03
  • 打赏
  • 举报
回复
这个我也碰到过,实在搞不清楚是怎么回事
  • 打赏
  • 举报
回复
有报错信息么?
grachel 2009-06-03
  • 打赏
  • 举报
回复
感谢各位的关注,我实在搞不懂是什么问题了,所以干脆将写入名片夹的方式给全改了,现在已经没问题了~~~~
下面附上写入的代码,希望对大家有所帮助:
插入工作电话号码的代码:

{
CContactDatabase* contactsDb = CContactDatabase::OpenL();
CleanupStack::PushL(contactsDb);
// Create a contact card and add some fields:
CContactItem* contact = CContactCard::NewLC();
CContactItemField* field = CContactItemField::NewLC(KStorageTypeText);
field->AddFieldTypeL(KUidContactFieldPhoneNumber); //插入工作固定电话需要两个field type值
field->SetMapping(KUidContactFieldVCardMapTEL);
field->AddFieldTypeL(KIntContactFieldVCardMapWORK);
field->SetMapping(KUidContactFieldVCardMapTEL);
field->TextStorage()->SetTextL(*tempValue);
contact->AddFieldL(*field);
CleanupStack::PopAndDestroy(2);
}

插入职位的代码:

{
CContactDatabase* contactsDb = CContactDatabase::OpenL();
CleanupStack::PushL(contactsDb);
// Create a contact card and add some fields:
CContactItem* contact = CContactCard::NewLC();
CContactItemField* field = CContactItemField::NewLC(KStorageTypeText);
field->AddFieldTypeL(KUidContactFieldJobTitle);
field->SetMapping(KUidContactFieldVCardMapTITLE);
field->TextStorage()->SetTextL(*tempValue);
contact->AddFieldL(*field);
CleanupStack::PopAndDestroy(2);
}

最后将contact添加到通讯录的代码如下;

{
// Add the new contact to the database and set it as the own card:
TContactItemId contactId = contactsDb->AddNewContactL(*contact);
contactsDb->SetOwnCardL(*contact);
contactsDb->CloseContactL(contactId);
}


读取的代码不需要做改变。这样就可以正确的实现添加和读取联系人信息了~~~~
大家如果还有问题欢迎讨论哈~~~~

3,119

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧