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

[android] Как загрузить иконки из интернета в TListItem ?


DimArt

Вопрос

У меня есть код, но он работает только под Windows, когда компилирую его под андроид, то картинки не загружаются.

В чём может быть причина?

const
  count_items = 10;
var
  Form1: TForm1;
  arr_urls:array[0..9]of String = (
  'http://pp.vk.me/c7004/c540105/v540105856/1ac7e/aA-hl0wGb9I.jpg'
  'http://cs390.vk.me/u16075638/a_5671aff5.jpg'
  'http://pp.vk.me/c624326/v624326216/16d8/ueJoy8De-oQ.jpg'
  'http://www.picbutler.de/bild/126494/einruesselfischkn44p.jpg'
  'http://pp.vk.me/c606724/v606724409/b8b8/bHKE730yRIU.jpg'
  'http://pp.vk.me/c424629/v424629207/8e14/uUte11lG5N8.jpg'
  'http://pp.vk.me/c7004/c540100/v540100602/ff0b/fhSBSeacn3s.jpg'
  'http://pp.vk.me/c620027/v620027321/1ab3d/h-DQxnB2tQQ.jpg'
  'http://pp.vk.me/c624622/v624622975/5c4b/EQ9cyj8INCg.jpg'
  'http://pp.vk.me/c606724/v606724409/b8bf/LpkFlJZxwzs.jpg'
  );
implementation

{$R *.fmx}
//*************************************************
procedure TForm1.FormCreate(Sender: TObject);
var
  I:Integer;
  LItem: TListViewItem;
begin

 for I := 1 to count_items do
    begin
      LItem           := ListView1.Items.Add;
      LItem.Text      := Format('Text bla-bla-bla %d', [I]);
      LItem.Detail    := Format('Detail bla-bla-bla %d', [I]);
     end;

    TThread.CreateAnonymousThread(procedure()
      var
        i:integer;
        img:TBitmap;
      begin
         for I := 1 to count_items do
           begin
             img:=TBitmap.Create;
             img:=(GetImgFromUrl(arr_urls[i-1]));

             TThread.Synchronize(TThread.CurrentThread, procedure()
              begin
                ListView1.Items[i-1].BitmapRef:=TBitmap.Create;
                ListView1.Items[i-1].BitmapRef.Assign(img);
                img.Free;
              end );
           end;
      end).Start;
end;
//*************************************************
function  TForm1.GetImgFromUrl(url:string):TBitmap;
var
  memStream: TMemoryStream;
  img:TBitmap;
begin
    memStream:=TMemoryStream.Create;
    img:= TBitmap.Create;
    result:=img;
  try
    IdHTTP1.Get(url,memStream);
    memStream.Position:=0;
    img.LoadFromStream(memStream);
  finally
    memStream.Free;
  end;
  result:=img;

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

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

  • 0

ListView1.Items[i-1].BitmapRef:=TBitmap.Create;

ListView1.Items[i-1].BitmapRef.Assign(img);

Не так. Просто bitmap.assign(img).

Проверьте размер стрима после гет-запроса.

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

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

И вообще перепишите код. Так не советую.

Делайте в потоке в цикле гет запросы и после каждого в синхронайз создавайте и настраивайте итем. Меньше вероятность тормозов и AV.

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...