Delphi Can
NetHttpClient Fmx Resim - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: NetHttpClient Fmx Resim (/showthread.php?tid=5954)



NetHttpClient Fmx Resim - cihankoca - 26-04-2021

Merhaba,

Uygulamamda aşağıdaki kodlar ile resim getiriyorum. Lakin eğer istenen dosya yok ise hata dönüyor bana ve listview de listelenemiyor. Onun kontrolünü nasıl sağlayabilirim.

Resmi Çağırdığım Bölüm :

try
  MS  := TMemoryStream.Create;
 MS  := ResimGoster('http://cihankoca.com.tr/resimler/201182.jpg');
 if MS.Size > 0 then mtSatisResim.LoadFromStream(MS);
finally
 FreeAndNil(MS);
end;

Resmi Kontrol Ettiğim Bölüm :

 
function TFrmSatis.ResimGoster(pUrl : string) : TMemoryStream;
var
 qrString: String;
 qrDims: integer;
 Ms1  : TMemoryStream;
begin
 if pUrl <> '' then
 begin
   qrDims    := Screen.Width - 100;
   qrString  := pUrl;
   try
     Ms1  := TMemoryStream.Create;
     try
       NetHTTPClient1.get(qrString, Ms1);
     except

     end;

     Ms1.Seek(0,soFromBeginning);

     Result := Ms1;
   finally
     //FreeAndNil(Ms1);
   end;
 end
 else
 begin
   //ShowMessage('Please, input a text.');
 end;
end;

Teşekkürler


NetHttpClient Fmx Resim - mrmarman - 26-04-2021

Mevcut yapı için konuşuyorum, öncelikle yapıda; function cevabı boolean yapın, tmemorystream'i parametre yapın.

if ile function true ise memorystream içeriğini okuyun.

try finally / try except ile de duruma göre result true-false değer alsın.


NetHttpClient Fmx Resim - cihankoca - 26-04-2021

Merhaba Hocam

Dediğiniz yaptım hem parametre olarak function da kullanıp hem de parametresiz dışarıdan kullanarak function sonucunda her ikisinde de boolean döndürerek ama aynı hata ile karşılaştım. NetHttpClient in değer alıp almadığını kontrol edemiyor gibi. Her halükarda bir değer dönüyor gibi çözümlüyorum


NetHttpClient Fmx Resim - mrmarman - 26-04-2021

@cihankoca

"hata dönüyor" derken exception düşüyor şeklinde yanlış anlamışım. 

* Resmin linkini bir browser'a yazdığınızda site ne cevap döndürüyorsa NetHttpClient o içeriği döndürür.

Sizin verdiğiniz link örneğin şunu döndürüyor.
Kod:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>

Diğer yandan içerik kontrolüne gerek kalmadan şöyle yaparsanız olacaktır.


Uses  System.Net.HttpClientComponent;

function ResimGoster(pUrl : string; pMS:TMemoryStream) : Boolean;
var
  LClient   : System.Net.HttpClientComponent.TNetHTTPClient;
  LResCode  : Integer;
begin
  Result  := False;
  if pUrl <> '' then
  begin
    if Assigned(pMS) then
    begin
      LClient := System.Net.HttpClientComponent.TNetHTTPClient.Create(nil);
      try
        LResCode := LClient.Get( pUrl, pMS ).StatusCode;
        // 404 not forund
        // 200 OK
        pMS.Seek(0, soFromBeginning);
        Result := LResCode = 200;
      finally
        LClient.Free;
      end;
    end;
  end;
end;





NetHttpClient Fmx Resim - cihankoca - 27-04-2021

Teşekkürler hocam deneyeceğim. O linki bilerek verdim içinde birşey olmadığı için olmayan da hatadan nasıl kurtarırım diye.

Oldu hocam teşekkürler