Web servis dataset okuma

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Web servis dataset okuma

Mesaj gönderen tuna »

Arkadaşlar merhaba. Delphi xe6 ile android uygulama geliştirmeye yeni başladım. (Delphi ile 15 yıldır win form uygulama geliştiriyorum)

Benim yapmak istediğim web servisten aldığım data yı mobil tarafta sqllite veri tabanındaki tabloya aktarma.
Sqllite kurulumunu ve çalıştırmasını yaptım. İnsert delete filan hepsi tamam. Ama bir türlü web servisten data çekemedim.
Bu konuda örneklerde çok kısıtlı. Yapmak istediğim şey çok basit aslında webservis benden kullanıcı adı ve şifre istiyo bunun sonucunda bana dataset gönderiyor.
Bende bu data set'i alıp aynen sqllite'daki tabloya aktaracağım.

Yardımcı olacak arkadaşlara şimdiden teşekkürler.
Kullanıcı avatarı
mustafasoy
Üye
Mesajlar: 154
Kayıt: 02 Ağu 2013 05:00
Konum: istanbul
İletişim:

Re: Web servis dataset okuma

Mesaj gönderen mustafasoy »

Blogumda bu konuya yer vermistim inceleyebilirsiniz
http://www.mustafasoy.com.tr
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Web servis dataset okuma

Mesaj gönderen tuna »

mustafasoy yazdı:Blogumda bu konuya yer vermistim inceleyebilirsiniz
Merhaba bloğunuzdaki yazıyı inceledim. Fakat siz orada array olark döndürmüşsünüz.
Ben data set gelen veriyi almam gerekiyor. Servis o şekilde yazılmış. Buna müdahale etme şansım yok.
Kullanıcı avatarı
barisatalay
Üye
Mesajlar: 398
Kayıt: 02 Nis 2013 05:43
İletişim:

Re: Web servis dataset okuma

Mesaj gönderen barisatalay »

tuna yazdı:
mustafasoy yazdı:Blogumda bu konuya yer vermistim inceleyebilirsiniz
Merhaba bloğunuzdaki yazıyı inceledim. Fakat siz orada array olark döndürmüşsünüz.
Ben data set gelen veriyi almam gerekiyor. Servis o şekilde yazılmış. Buna müdahale etme şansım yok.
Ben yazılım işlerinde yeniyim hele ki webservislerde ama şuana kadar kullandığım her webservis string bir veri (yani json xml fark etmez) döndürüyordu sizin ki bu yapılardan daha mı farklı ?
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Web servis dataset okuma

Mesaj gönderen unicorn64 »

sanırım web servisi .Net le geliştirilmiş ve DataSet döndürüyor,
dönen stringi XmlDocumente alıp işleyebilirsiniz.

http://stackoverflow.com/questions/1658 ... webservice
https://www.google.com.tr/webhp?q=c%23% ... set+delphi
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
lazymule
Üye
Mesajlar: 127
Kayıt: 16 Eki 2006 04:03
İletişim:

Re: Web servis dataset okuma

Mesaj gönderen lazymule »

Daha önce benim takıldığım bir soruna benziyor
http://edn.embarcadero.com/article/28631
linki incelermisin
Evrende Ulaşılamayacak Tepe Yoktur !!!!
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
Kullanıcı avatarı
mustafasoy
Üye
Mesajlar: 154
Kayıt: 02 Ağu 2013 05:00
Konum: istanbul
İletişim:

Re: Web servis dataset okuma

Mesaj gönderen mustafasoy »

c# ile yazılmış ve geriye dataset ile dönüş yapan bir veriyi delphi ile alamamıştım bayağı bir debelenmiştim
sonunda array ile denediğimde sorunsuz alabildim
umarım dataseti almayı başarırsınız ve bizede kaynak olur
kolay gelsin
http://www.mustafasoy.com.tr
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Web servis dataset okuma

Mesaj gönderen mrmarman »

Konuya dahil olmak istemedim, şimdiye kadar çözülmüş olmasını bekledim.

- Arkadaşlar, her şeyi delphi tarafından beklemeyin.

- Gelen DATA XML değil mi, amacınızı XML parse işlemi üzerine yoğunlaştırın. Buradan gelen veriden bir kuple code tag içerisinde paylaşabilirseniz size o veri için parse fonksiyonunu yazarım. Örnek olsun diye tabii.

- Bu arada eğer diyorsanız ki, "XML dönen datayı string olarak okuyamıyorum", o zaman size öncelikle WebServis konusunu yeniden değerlendirin demek zorundayım. :oops:

- Hem bu sayede string operasyonlarının da her daim lazım olduğunu yeniden hatırlatmış oluruz. Gelen paket(ler) bozuk olursa XML mapper vb. belki de veriyi okuyamayacaktır.

- Ben bir örnek vereyim..Google'da rastgele tarattım veri bloğu olarak http://s3.amazonaws.com/1000genomes benzeri bir veri üzerinde göstereyim.

Kod: Tümünü seç

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>1000genomes</Name>
<Prefix/>
<Marker/>
<MaxKeys>1000</MaxKeys>
<IsTruncated>true</IsTruncated>
<Contents>
<Key>20131219.populations.tsv</Key>
<LastModified>2014-09-01T03:25:23.000Z</LastModified>
<ETag>"f4136a39ba97906397f4c2996d2fde10"</ETag>
<Size>1663</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
<Contents>
<Key>20131219.superpopulations.tsv</Key>
<LastModified>2014-08-30T18:51:20.000Z</LastModified>
<ETag>"1a0ab10759377df262b8ecba927e1eb2"</ETag>
<Size>97</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
<Contents>
<Key>CHANGELOG</Key>
<LastModified>2014-12-02T12:30:18.000Z</LastModified>
<ETag>"8b83929d46df4a29b9c1fafee2198bfb"</ETag>
<Size>239180</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
<Contents>
<Key>README.alignment_data</Key>
<LastModified>2014-09-02T15:39:53.000Z</LastModified>
<ETag>"9a74187431e1938b490efa34c2f2272d"</ETag>
<Size>15977</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
<Contents>
<Key>README.analysis_history</Key>
<LastModified>2014-01-30T11:13:29.000Z</LastModified>
<ETag>"30133df930a45b2aac29cd229169dab7"</ETag>
<Size>5289</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
<Contents>
<Key>README.complete_genomics_data</Key>
<LastModified>2014-01-31T03:44:08.000Z</LastModified>
<ETag>"097f06c7e5f6ee192aa38f8a3d54f6ad"</ETag>
<Size>5967</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
<Contents>
<Key>README.crams</Key>
<LastModified>2014-08-29T00:22:38.000Z</LastModified>
<ETag>"3248ffbddafe601f78d5981285bf30ea"</ETag>
<Size>563</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
<Contents>
<Key>README.ebi_aspera_info</Key>
<LastModified>2013-08-06T16:11:58.000Z</LastModified>
<ETag>"548f8dd4a270fa9677e640606852788d"</ETag>
<Size>935</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
</ListBucketResult>
verisi şeklinde bir kuple aldım... Bunun parse fonksiyonu şu şekilde...
Parse Procedure :

Kod: Tümünü seç

//  Content Ornegi
// ----------------
// <Contents>
//   <Key>20131219.populations.tsv</Key>
//   <LastModified>2014-09-01T03:25:23.000Z</LastModified>
//   <ETag>"f4136a39ba97906397f4c2996d2fde10"</ETag>
//   <Size>1663</Size>
//   <StorageClass>STANDARD</StorageClass>
// </Contents>

procedure XMLParse( strGelen:String; HedefListView:TListView );
  Function TagArasiField( strVeri, strTag:String ): string;
  Var
    strAra : String;
  begin
    strAra := '<' + strTag + '>';
    if Pos( strTag, strVeri ) > 0 then
    begin
      System.Delete( strVeri, 1, Pos(strAra, strVeri) + Length(strAra)-1 );
      Result := Copy(strVeri, 1, Pos('</', strVeri) -1);
    end else Result := '';
  end;
Var
  strAra, strBlok, strVeri : String;
  i:Integer;
begin
  HedefListView.Clear;
  strBlok := strGelen;
  while Pos('<Contents>', strBlok) > 0 do
  begin
    strAra := '<Contents>';
    System.Delete( strBlok, 1, Pos(strAra, strBlok) + Length(strAra)-1 );
    strAra := '</Contents>';
    strVeri := Copy(strBlok, 1, Pos(strAra, strBlok)-1);
    // Şu an Veri Bloğu elimizde. Bileşenlerine ayıralım...
    With HedefListView.Items.Add do
    begin
      Caption := '';
      SubItems.Add( TagArasiField( strVeri, 'Key'          ) );
      SubItems.Add( TagArasiField( strVeri, 'LastModified' ) );
      SubItems.Add( TagArasiField( strVeri, 'ETag'         ) );
      SubItems.Add( TagArasiField( strVeri, 'Size'         ) );
      SubItems.Add( TagArasiField( strVeri, 'StorageClass' ) );
    end;
  end; // While
  for i := 0 to HedefListView.Columns.Count - 1
    do HedefListView.Columns[i].Width := -1; // otomatik genişlik
end;
Kullanımı :

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  XMLParse( Memo1.Lines.Text, ListView1 );
end;
Sonuç :
Resim

Artık dilediğiniz veritabanına aktarabilirsiniz. :idea:
Örnek Proje ekte.... Başarılar.
Dosya ekleri
XMLParse_Ornegi.rar
XMLParse Örneği Kaynak Kodları
(200.09 KiB) 174 kere indirildi
Resim
Resim ....Resim
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Web servis dataset okuma

Mesaj gönderen tuna »

Öncelikle cevap veren arkadaşlara çok teşekkür ederim. Delphi ile .net ile yazılan veriyi xml mapper aracını kullanarak win form'a sorunsuz çektim. Gel gelelim androidde işler değişiyor. Burada xml mapper ile yaptığınız dosyadan veriyi androidde okutamıyorsunuz. Bir şekilde okuttunuz sonrası çok problemli oluyor. Türkçe karakter vs. vs. mrmarman hocamın dediği yöntem çok mantıklı geldi. Kod tarafı biraz zahmetli ama denemeye değer. Sonuçları buradan bildireceğim.
Yinede daha basit yöntemler bulursanız yazmanızı rica ederim.
Cevapla