Array
(
)

ListView com imagem de URL via JSON Dalphi XE 7

Sid Soluções
|
MVP
Pontos: 100
    29 abr 2015

Estou com um sistema usando JSON criado por php. Consigo exibir os dados certinho, só que não estou conseguindo exibir uma imagem via URL.
Tenho a imagem URL: http://ovaral.com.br/webservices/images/estabelecimentos/escovaria.jpg
logo da empresa (Clique na imagem para abrir em uma nova janela)
JSON:
#Código

"estabelecimentos":[{"estabelecimento_id":"2","estabelecimento_razao":"Escovaria Domiciliar","estabelecimento_fantasia":"Escovaria","estabelecimento_logo":"\/images\/estabelecimentos\/escovaria.jpg","estabelecimento_cidade":"Petrolina"},{"estabelecimento_id":"1","estabelecimento_razao":"Nova Beleza","estabelecimento_fantasia":"Nova Beleza","estabelecimento_logo":"\/images\/estabelecimentos\/nova_beleza.jpg","estabelecimento_cidade":"Petrolina"}]

Lucas Azevedo
   - 04 ago 2015

Achou uma solução amigo, tbm procuro a mesma coisa?

Sid Soluções
|
MVP
Pontos: 100
    04 ago 2015

Consegui amigo. Fiz o seguinte:

#Código

procedure TfBuscaEstabelecimentos.PreparaJSON(strJSON: String);
var
  LJsonObj,AJsonSubObj : TJSONObject;
  AJsonPair, AJsonSubPair: TJSONPair;
  AJsonArray: TJSONArray;
  J, I, nC: Integer;
  StringJSON,imgURL: String;
  LItem: TListBoxItem;
  TM: TMemoryStream;
  HTTP : TIdHttp;
  imgItem: TImage;
  lTexto: TLabel;
begin
  tmpListaEstabelecimento.Limpar;
  lstPorCidade.BeginUpdate;
  lstPorCidade.Items.Clear;
  lstInformacoes.Items.Clear;
  LJsonObj := TJsonObject.Create;
  StringJSON := '{'+strJSON;
  StringJSON := StringJSON+'}';

  LJsonObj := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StringJSON), 0) as TJSONObject;
  AJsonPair := LJsonObj.Get(0);
  AJsonArray := (AJsonPair.JsonValue as TJSONArray);
  for I := 0 to AJsonArray.Size - 1 do
  begin
    LItem := TListBoxItem.Create(lstPorCidade);
    tmpEstabelecimento := TEstabelecimentoPronto.Create;
    // Popular ListView
    AJsonSubObj := TJSONObject(AJsonArray.Get(I));
    for J := 0 to AJsonSubObj.Size - 1 do
    begin
      AJsonSubPair := AJsonSubObj.Get(J);
      {
        Aqui tenho Uma classe para pegar os fields e o astring (Dado do Objeto)
        utilizando o AJsonSubPair.JsonString.Value e o AJsonSubPair.JsonValue.Value
      }
      if (AJsonSubPair.JsonString.Value = 'estabelecimento_razao') then
      begin
        tmpEstabelecimento.Razao := AJsonSubPair.JsonValue.Value;
        lTexto := TLabel.Create(lstPorCidade);
        lTexto.Name := 'lRazao'+IntToStr(j)+'n'+IntToStr(i);
        lTexto.Text := AJsonSubPair.JsonValue.Value;
        lTexto.Parent := LItem;
        lTexto.Position.X := 130;
        lTexto.Height := 72;
      end;
      if (AJsonSubPair.JsonString.Value = 'estabelecimento_id') then
      begin
        tmpEstabelecimento.Id := StrToInt(AJsonSubPair.JsonValue.Value);
        LItem.Tag := StrToInt(AJsonSubPair.JsonValue.Value);
      end;
      if (AJsonSubPair.JsonString.Value = 'estabelecimento_logo') then
      begin
        tmpEstabelecimento.Logo := AJsonSubPair.JsonValue.Value;
        imgURL := AJsonSubPair.JsonValue.Value;
        nC := Length(Trim(imgURL));
        if (nC > 4) then
        begin
          try
            TM := TMemoryStream.Create;
            TM.Clear;
            try
              imgHttp.Get(imgURL,TM);
            except
              on E: EIdHTTPProtocolException do
                if E.Message <> 'HTTP/1.1 404 Not Found' then
                  ShowMessage(E.Message);
            end;
            {LItem.ItemData.Bitmap.LoadFromStream(TM);
            LItem.ItemData.Bitmap.Resize(120,72);  }
            imgItem := TImage.Create(lstPorCidade);
            imgItem.Name := 'img'+IntToStr(J)+'n'+IntToStr(I);
            imgItem.Parent := LItem;
            imgItem.Height := 72;
            imgItem.Width  := 120;
            imgItem.Position.X := 5;
            imgItem.Bitmap.LoadFromStream(TM);
            LItem.Height := 75;
          finally
            TM.Free;
          end;
        end;
      end;
    end;
    tmpListaEstabelecimento.Adicionar(tmpEstabelecimento);
    lstPorCidade.AddObject(LItem); // Adiciona o LItem a minha ListBox
  end;
  lstPorCidade.EndUpdate;
end;


Qualquer dúvida só perguntar :-)

Sid Soluções
|
MVP
Pontos: 100
    21 mai 2016


Citação:
Achou uma solução amigo, tbm procuro a mesma coisa?


Conseguiu com meu exemplo?