如何在我的Symbian应用程序中检查有效的联系人ID?

时间:2011-05-23 01:55:58

标签: c++ symbian

在我的应用程序中,我有两个视图,主视图和联系人视图,我有一个已保存的联系人ID。

当我加载第二个视图时,应该使用我保存的ID列表访问默认的联系人数据库,并获取这些联系人信息标题等。因为联系人已被删除而离开。

那么,在尝试访问其字段并导致请假之前,如何检查我的ID的联系人是否存在?

CContactDatabase* contactsDb = CContactDatabase::OpenL();           
CleanupStack::PushL(contactsDb);

for (TInt i = 0; i < CsIDs.Count(); i++)// looping through contacts.
{

   TRAPD(err, contactsDb->ReadContactL(CsIDs[i])) //---->CsIDs is an array that holds IDs

   if(KErrNotFound == err)

      {

          CsIDs.Remove(i);

      }

}
CleanupStack::PopAndDestroy(1,contactsDb);

1 个答案:

答案 0 :(得分:0)

感谢Abhijith的帮助,我想出了这个问题背后的原因,我不应该打电话

For loop 下的 TRAPD 下直接

ReadContactL ,所以我创建了一个检查ID有效性的函数

我在 TRAPD 下调用它,现在我的联系人列表视图加载得很好,并且从

中删除了无效的ID

我保存的ID列表。

解决方案是在处理“离开”时遵循Symbian C ++规则:

void LoadContactsL()
    {
       CContactDatabase* contactsDb = CContactDatabase::OpenL();           
       CleanupStack::PushL(contactsDb);

       for (TInt i = 0; i < CsIDs.Count(); i++)// looping through contacts.
          {

             TRAPD(err, ChickValidContactsIDL(i)) //-->Calling IDs checking function under TRAPD

             if(KErrNotFound == err)

               {

                  CsIDs.Remove(i);

               }

         }
      CleanupStack::PopAndDestroy(1,contactsDb);
  }

//检查无效ID的函数。

// 重要的Symbian规则:对于 TRAP线束下“保留”的功能,请返回“ void

void ChickValidContactsIDL(TInt index)
{
   CPbkContactEngine* iPbkEngine = CPbkContactEngine::NewL(&iEikonEnv->FsSession());
       CleanupStack::PushL(iPbkEngine);
       iPbkEngine->OpenContactL(CsIDs[index]);
   CleanupStack::PopAndDestroy(1,iPbkEngine);           
}