- Sizlere tam bir proje hazırladım. Diğer sitede sorulan bir soru üzerine bunu tam bir proje halinde sunarak Android konusundaki kaynak kodu sıkıntısına bir nebze faydamız dokunsun istedik.

* Kendim de bazı şeyler denemek istedim. Mesela WEB'den getirdiğim JPG'yi Bitmap'e nasıl atarım diye düşünüyordum, Android altında sürpriz bir şekilde Bitmap yapı JPEG'i direkt kabul etti.

* Ekran süsüne dikkat etmiyorum. Son (1) saatlik bir çalışma sonuçta. Sadece bu başlığı okuyanlara method hakkında fikir vermek için hazırladım.
* Amaç bu projeyi herkes incelesin, Android'den artık korkmasın. Web'de dolaşıyorum allahın kulu herhangi bir konuda tek bir örnek kaynak kod bile koymamış ... Amerika'yı yeniden keşfetmek zorunda kalıyoruz.
* Sistem
(1) IdHttp ile RSS linkinden XML veriyi alıyor,
(2) PARSE ediyor,
(3) ListView'e Item açıyor,
(4) Item altında Text alanlar oluşturuyor (birden fazla)
(5) Veriyi basıyor.
(6) Bir Image nesnesi açıyor
(7) Bu arada Parse edilen Description alanındaki SRC ile JPEG Image linki çekiliyor.
(8) IdHttp ile bu link MemoryStream'e download ediliyor.
(9) Image nesnesine Stream üzerinden aktarılıyor. (fiziksel dosya kullanılmadan)
(10) Bu arada ProgressBar var aşağıda o %100 oluyor ve gizleniyor.
(11) Herhangi bir ITEM üzerine tek tık dokunulduğunda o link Cihazın Browserinde açılıyor.
Kısa zamanda çok iş yaptırdık...

Kod: Tümünü seç
procedure RSS_Parse( ListView:TListView; IdHttp:TIdHttp; Progress:TProgressBar );
Procedure ObjectOlustur( AItem:TListViewItem; LItem: TListItemText; strRefKod, strText:String; iOffsetX, iOffsetY, iWidth,iHeight, iFontSize:Integer; iFontColor: LongInt );
begin
LItem := TListItemText.Create(AItem);
LItem.Name := strRefKod;
LItem.Font.Size := iFontSize;
LItem.TextColor := iFontColor;
LItem.Align := TListItemAlign.Leading; // En Sol
LItem.VertAlign := TListItemAlign.Leading; // En Üst
LItem.PlaceOffset.X := iOffsetX;
LItem.PlaceOffset.Y := iOffsetY;
LItem.TextAlign := TTextAlign.taLeading;
LItem.Trimming := TTextTrimming.ttCharacter;
LItem.IsDetailText := True;
LItem.Width := iWidth;
LItem.Height := iHeight;
LItem.Text := strText;
end;
Const
URL = 'http://www.turkanime.tv/rss.xml';
Type tBilgi = Record
strTitle,
strLink,
strDescription,
strPubDate,
strAuthor,
strGuid : String;
end;
Var
strIcerik,
strAra,
strGecici,
strBlok : String;
Bilgi : tBilgi;
AItem : TListViewItem;
LImage : TListItemImage;
LData1, LData2, LData3, LData4,
LLabel1, LLabel2, LLabel3 : TListItemText;
MS : TMemoryStream;
iSayac : Integer;
begin
ListView.ClearItems;
strIcerik := IdHttp.Get( URL );
// Sadece Kaç Başık var onu sayıcaz. Progressbar için ön çalışma...
strGecici := strIcerik;
iSayac := 0;
strAra := '<item>';
while Pos(strAra, strGecici) > 0 do
begin
System.Delete( strGecici, 1, Pos(strAra, strGecici) + Length(strAra)-1 );
inc(iSayac);
end;
if Progress <> nil then
begin
Progress.Min := 0;
Progress.Max := iSayac;
Progress.Visible := True;
end;
iSayac := 0;
while Pos('<item>', strIcerik) > 0 do
begin
Application.ProcessMessages;
inc(iSayac);
if Progress <> nil then Progress.Value := iSayac;
strAra := '<item>';
System.Delete( strIcerik, 1, Pos(strAra, strIcerik) + Length(strAra)-1 );
strAra := '</item>';
// strBlok içerisinde bir başlık ve bilgileri olacaktır...
strBlok := Copy(strIcerik, 1, Pos( strAra, strIcerik ) + Length(strAra)-1 );
FillChar( Bilgi, sizeOf(Bilgi), 0 );
strAra := '<title>';
if Pos( strAra, strBlok ) > 0 then
begin
strGecici := strBlok;
System.Delete(strGecici, 1, Pos(strAra, strGecici) + Length(strAra)-1 );
Bilgi.strTitle := Trim(Copy(strGecici, 1, Pos('<', strGecici)-1 ));
end;
strAra := '<link>';
if Pos( strAra, strBlok ) > 0 then
begin
strGecici := strBlok;
System.Delete(strGecici, 1, Pos(strAra, strGecici) + Length(strAra)-1 );
Bilgi.strLink := Trim(Copy(strGecici, 1, Pos('<', strGecici)-1 ));
end;
strAra := '<description>';
if Pos( strAra, strBlok ) > 0 then
begin
strGecici := strBlok;
System.Delete(strGecici, 1, Pos(strAra, strGecici) + Length(strAra)-1 );
strAra := 'src="';
System.Delete(strGecici, 1, Pos(strAra, strGecici) + Length(strAra)-1 );
Bilgi.strDescription := Trim(Copy(strGecici, 1, Pos('"', strGecici)-1 ));
end;
strAra := '<pubDate>';
if Pos( strAra, strBlok ) > 0 then
begin
strGecici := strBlok;
System.Delete(strGecici, 1, Pos(strAra, strGecici) + Length(strAra)-1 );
Bilgi.strPubDate := Trim(Copy(strGecici, 1, Pos('<', strGecici)-1 ));
end;
strAra := '<author>';
if Pos( strAra, strBlok ) > 0 then
begin
strGecici := strBlok;
System.Delete(strGecici, 1, Pos(strAra, strGecici) + Length(strAra)-1 );
Bilgi.strAuthor := Trim(Copy(strGecici, 1, Pos('<', strGecici)-1 ));
end;
strAra := '<guid>';
if Pos( strAra, strBlok ) > 0 then
begin
strGecici := strBlok;
System.Delete(strGecici, 1, Pos(strAra, strGecici) + Length(strAra)-1 );
Bilgi.strGuid := Trim(Copy(strGecici, 1, Pos('<', strGecici)-1 ));
end;
if Bilgi.strTitle <> '' then
begin
AItem := ListView.Items.Add;
AItem.Height := 132;
AItem.Text := '';
LImage := TListItemImage.Create(AItem);
LImage.Name := 'Resim';
LImage.Align := TListItemAlign.Trailing; // En Sağ
LImage.VertAlign := TListItemAlign.Center; // Orta
LImage.PlaceOffset.Y := 2;
LImage.PlaceOffset.X := 0;
LImage.Width := 90;
LImage.Height := 128;
LImage.OwnsBitmap := True;
LImage.Bitmap := TBitmap.Create(0, 0);
MS := TMemoryStream.Create;
IdHttp.Get(Bilgi.strDescription, MS);
MS.Seek(0,soFromBeginning);
LImage.Bitmap.LoadFromStream(MS);
MS.Free;
// Başlıklar
// -----------------------------------------------------------------------------
ObjectOlustur( AItem, LLabel1, 'Bas1', 'Title:', 4, 20, 500, 20, 8, TAlphaColorRec.Maroon );
ObjectOlustur( AItem, LLabel2, 'Bas2', 'PubDt:', 4, 40, 500, 20, 8, TAlphaColorRec.Black );
ObjectOlustur( AItem, LLabel3, 'Bas3', 'Auth.:', 4, 60, 500, 20, 8, TAlphaColorRec.Black );
// Veri Alanları
// -----------------------------------------------------------------------------
ObjectOlustur( AItem, LData1, 'Data1', Bilgi.strTitle, 54, 20, 500, 20, 8, TAlphaColorRec.Maroon );
ObjectOlustur( AItem, LData2, 'Data2', Bilgi.strPubDate, 54, 40, 500, 20, 8, TAlphaColorRec.Black );
ObjectOlustur( AItem, LData3, 'Data3', Bilgi.strAuthor, 54, 60, 500, 20, 8, TAlphaColorRec.Black );
ObjectOlustur( AItem, LData4, 'Data4', Bilgi.strLink, 04, 100, 500, 20, 8, TAlphaColorRec.Black );
end;
end; // While
if Progress <> Nil then Progress.Visible := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
AniIndicator1.Visible := True;
RSS_Parse( ListView1, IdHTTP1, ProgressBar1 );
AniIndicator1.Visible := False;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
IdHttp1.Disconnect;
// Bizim Close()'un Android karşılığı...
// USES FMX.Platform.Android
// MainActivity.Finish();
FMX.Platform.Android.MainActivity.finish();
end;
procedure TForm1.ListView1ItemClick(const Sender: TObject;
const AItem: TListViewItem);
var
Intent : JIntent; // Androidapi.JNI.GraphicsContentViewText
strURL : String;
begin
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
strURL := (AItem.Objects.FindObject('Data4') as TListItemText).Text;
Intent.setData(StrToJURI( strURL ));
SharedActivity.startActivity(Intent);
end;

Kaynak kodları ile proje bu linkte...
