Перейти к содержанию
Fire Monkey от А до Я
  • 0

[TBitmap] Загрузка изображений из интернета в приложение


ra.eremeev

Вопрос

Друзья, выручайте!

 

Уже на сутки "завис"...

 

Приложение под Android должно загружать картинки в TListViewItem (аватарки) с HTTP.

Ресурс доступен. Картинки на нем тоже.

 

Использую iDHTTP (iDHTTP тоже "кидал" на форму и создавал динамически - результат один) и TMemoryStream.

Код ниже.

 

Само приложение на устройстве выдает ошибку: Access violation at address 559E45CC accessing address 00000000

Отладчик выдает: class segmentation fault 11

 

Опытным путем установил, что ошибка, скорее всего, возникает при попытке заполнения TMemoryStream (пробовал TMemoryStream.LoadFromFile - то же самое, хотя приложением TListViewItem.BitMap.LoadFromFile с этим же файлом проходит на ура и все работает).

 

Во всех случаях используются PNG-картинки небольшого размера и разрешения: 20-25 кБ.

В коде адрес картинки указан тестовый осознанно (в приложение картинка по используемому адресу доступна).

 

 

Часть кода:

var item:TListViewItem;
      pic:TMemoryStream;
      idhttp1:tidhttp;
...
idhttp1.Create(Application);
pic:=TMemoryStream.Create;
try
 IdHTTP.Get('http://site.ru/icons/icon.png, pic);
    try
     Item.Bitmap.LoadFromStream(pic);
     except
    end;
    finally
    pic.Free;
    IdHTTP1.Free;
   end;

Вопроса 2:

  1. Что я делаю не так?
  2. Подскажите, пож-та, хороший пример для выполнения такой задачи (желательно с применением потоков - чтобы приложение не висло на период загрузки данных из HTTP).

Спасибо большое!

 

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

idhttp1.Create(Application); - что это за бред?

IdHTTP - это откуда взялось?

никогда и никому этот код не показывай

 

берем файлик во вложении подключаем в проекте и пишем

with ListView1.Items.Add do
begin
  Text := 'Text';
  Bitmap.LoadFromUrl('http://site.ru/icons/icon.png');
end;

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

FMX.Features.Bitmap.Helpers.zip

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0

ZuBy, спасибо очередной раз!

 

Все прекрасно работает :)

Обрати внимание, пож-та, в представленном тобой модуле необходимо скорректировать наименование в первой строке Unit...

Ссылка на комментарий
  • 0

Использование данной процедуры для загрузки большого числа файлов способно сойти за DDOS-атаку и вызвать блокировки сервером.

Вдруг пригодится...

 

Требует допиливания и исключения инциализаций/разрывов соединений...

 

Здесь затрагивал: http://fire-monkey.ru/topic/2170-zagruzka-failov-iz-interneta/?p=11778 

Ссылка на комментарий
  • 0

У меня почему то не работает. Помимо FMX.Features.Bitmap.Helpers пробовал и другие подобные. Ни один на андроид не работает, хотя под Windows все нормально! Приложение либо подвисает, либо вообще ничего не происходит! 

Использую Delphi 10 Seattle, Android 6.0.1

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...