Android: Тук карта, как да заредя асинхронно изображение на плочка?

Като плочка използвам Here-map.

Вместо това се опитвам да персонализирам растерни плочки от S3 сървър. Следвайте документацията, има два класа, които ми помагат да направя това: UrlMapRasterTileSourceBase и MapRasterTileSource.

В моя случай се опитах да създам нов екземпляр на MapRasterTileSource, след което да заменя функцията getTileWithError(int x, int y, int zoomLevel), за да заредя моето изображение на плочка от S3 сървър.

Проблемът е, че времето за зареждане на изображение е твърде дълго и потребителският интерфейс изглежда изостава.

В документа ето част:

Забележка: Уверете се, че getTileWithError() се връща в рамките на разумен период от време. Ако операцията ви отнема по-дълъг период от време, стартирайте асинхронна операция и върнете кода за грешка TileResult.Error.NOT_READY, докато операцията е в ход.

Но нямам идея как да го приложа. Опитах се да заредя изображение с обратно извикване, но не знам какво да правя, след като имам резултат.

Бихте ли ми помогнали с това, моля!?


person Lạng Hoàng    schedule 08.09.2015    source източник


Отговори (1)


Как зареждате растерни плочки от S3? Синхронна HTTP заявка ли е, която извиквате от getTileWithError?

Правилният поток трябва да бъде: -getTileWithError() // за конкретен x, y, z -Изпълнете извличането на плочки от вашия S3 слой асинхронно чрез нишка или AsyncTask. -Междувременно getTileWithError() ще се извиква непрекъснато и вие можете да върнете "TileResult.NOT_READY" -Когато изображението е напълно изтеглено, след това върнете изображението обратно към средата за изпълнение.

Ако времето, прекарано в getTileWithError, отнеме твърде много време, източникът на плочка ще бъде деактивиран автоматично.

person David Leong    schedule 10.09.2015
comment
-Когато изображението е напълно изтеглено, върнете изображението обратно във времето за изпълнение. =› Това означава, че трябва да кешираме резултата, нали? Понастоящем правя същото с това, което предлагате, като зареждам async, връщам NOT_READY и когато данните са готови при обратно извикване -› ги запазвам в кеш файл, следващия път, когато getTileWithError() извика отново, проверявам дали има кеш файл за тази плочка след това се зарежда. Или имате друго решение за връщане на изображението обратно във времето за изпълнение? - person Lạng Hoàng; 11.09.2015