×
Namespaces

Variants
Actions

Экспорт ориентиров

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Статья
Перевод:
Den123
Последнее редактирование: hamishwillee (09 Dec 2011)

Класс CPosLandmarkEncoder позволяет получать данные из внутреннего представления ориентиров. Данный класс можно использовать для экспорта ориентиров из базы данных в локальные файлы. При создании инстанции данного класса необходимо указать MIME-тип. Для выгрузки ориентиров в XML-файлы можно использовать MIME-тип: "application/vnd.nokia.landmarkcollection+xml".

Следующий фрагмент кода демонстрирует, как выгрузить все базы данных ориентиров в XML-файлы

Необходимо включить следующие заголовочные файлы:

  • epos_cposlmdatabasemanager.h
  • epos_cposlandmarkencoder.h
  • bautils.h - для BAFLUTILS

В MMP-файле должны быть указаны следующие библиотеки:

  • eposlmdbmanlib.lib
  • eposlandmarks.lib
  • bafl.lib - для BaflUtils
// RFs используется для некоторых проверок
RFs rFs;
User::LeaveIfError( rFs.Connect() );
CleanupClosePushL( rFs );
 
// каталог для выгрузки
_LIT( KBackupFolder, "C:\\LmBackup\\" );
 
// проверка существования каталога
TFileName backupFolder( KBackupFolder );
BaflUtils :: EnsurePathExistsL( rFs, backupFolder );
 
// переменная используется для формирования имени файла
_LIT( KReplace, "_" );
TBuf<1> replaceStr( KReplace );
 
// менеджер баз данных ориентиров
CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager :: NewL();
CleanupStack :: PushL( dbManager );
 
// протокол локальных баз данных
_LIT( KFileProto, "file" );
 
// заполнение массива URI локальных баз данных
CDesCArray* dbUriList = dbManager->ListDatabasesLC( KFileProto );
 
// MIME type для импорта и экспорта
_LIT8( KPosMimeTypeLandmarkCollectionXml, "application/vnd.nokia.landmarkcollection+xml" );
 
// encoder используется для экспорта
CPosLandmarkEncoder* encoder = CPosLandmarkEncoder::NewL(KPosMimeTypeLandmarkCollectionXml);
CleanupStack :: PushL( encoder );
 
// массив для экспортируемых элементов
RArray<TPosLmItemId> itemsArray;
CleanupClosePushL( itemsArray );
 
for( TInt i = 0; i < dbUriList->Count(); i++ )
{
// открываем текущую базу данных
TPtrC currentUri = (*dbUriList)[i];
CPosLandmarkDatabase* db = CPosLandmarkDatabase :: OpenL( currentUri );
CleanupStack :: PushL( db );
 
// итератор используется для чтения всех ориентиров текущей базы
CPosLmItemIterator* iter = db->LandmarkIteratorL();
CleanupStack::PushL( iter );
 
// если итератор не пустой
if( iter->NumOfItemsL() > 0 )
{
// получение идентификаторов всех ориентиров
itemsArray.Reset();
iter->GetItemIdsL( itemsArray, 0, iter->NumOfItemsL() );
 
// формирование файлового имени из URI: file://e:my.ldb -> C:\LmBackup\e_my.ldb
TFileName fileName( backupFolder );
fileName.Append( currentUri.Right( currentUri.Length() - 7 ) );
fileName.Replace( backupFolder.Length() + 1, 1, replaceStr ); // : -> _
 
// если файл уже существует - удалить файл
if( BaflUtils :: FileExists( rFs, fileName ) )
BaflUtils :: DeleteFile( rFs, fileName );
 
// указываем файл для экспорта
encoder->SetOutputFileL( fileName );
 
// выполнение экспорта в пакетном режиме
ExecuteAndDeleteLD( db->ExportLandmarksL( *encoder, itemsArray,
CPosLandmarkDatabase::EIncludeCategories ) );
 
// завершение экспорта в пакетном режиме
ExecuteAndDeleteLD( encoder->FinalizeEncodingL() );
}
CleanupStack :: PopAndDestroy( 2 ); // iter db
}
CleanupStack :: PopAndDestroy( 5 ); // rFs itemsArray encoder iDbList dbManager

Внутренние ссылки

This page was last modified on 9 December 2011, at 04:16.
56 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×