Как я могу проверить действительный идентификатор контакта в моем приложении Symbian? - PullRequest
1 голос
/ 23 мая 2011

В моем приложении у меня есть два вида: основной вид и вид контактов, и у меня есть сохраненный идентификатор контактов.

Когда я загружаю свой второй просмотр, он должен получить доступ к базе данных контактов по умолчанию, используя мой сохраненный список идентификаторов, и получить эту информацию о контактах. Заголовок и т. Д. Он уходит, потому что контакт был удален.

Итак, как я могу проверить, существует ли контакт с моим идентификатором, прежде чем я попытаюсь получить доступ к его полям и вызвать отпуск?

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 голосов
/ 24 мая 2011

Спасибо Abhijith за вашу помощь, и я выяснил причину этой проблемы, я не должен звонить

ReadContactL прямо под TRAPD под Для цикла , поэтому я создал функцию, которая проверяет действительность идентификатора

, и вызвал ее в TRAPD , и теперь мой список контактов хорошо загружается, и недействительные идентификаторы удаляются из

Мой список сохраненных идентификаторов.

Решение состоит в том, чтобы следовать правилам 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);
  }

// Функция, которая проверяет недопустимые идентификаторы.

// Важное правило Symbian : Возврат " void " для функций, которые " Оставляют " под Жгутом проводов .

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