XE7-Android-REST(JSON) Uygulama ...

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 521
Kayıt: 05 May 2005 02:24
Konum: DelphiTürkiye.COM

XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen hi_selamlar » 16 Mar 2015 02:25

S.A. arkadaşlar.
Öncelikle herkese kolay gelsin.

IDE : XE7
DB : MySQL

Bir kaç gündür Android için veri listeleme ve işleme için örnek arıyorum, denemeler yapıyorum.
Videoları izledim. Ama bir türlü işlemleri başaramadım.

Sunucudaki bilgilere UniDAC ile bağlanıp verileri çekiyorum. Çok uzun sürüyor.
100 satırlık bir veri için 20 sn. gibi bekleme süresi var. Çok uzun oluyor.

Forum da REST (JSON) uygulamalarının veri çekme ve işleme için hızlı olduğu söylendi.
Bu konuda ben çok yetersizim. Yönlendirmenize ve yardımlarınıza ihtiyacım var.

Teşekkürler...

** Değerli Yöneticilerim ™ ***
Acaba XE için Android seminer bu yakınlarda düşünülüyor mu ?
Herkes cahildir, bazi konularda.

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4717
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen mrmarman » 16 Mar 2015 02:34

Bekleme süresi neden uzun? Bunu sorgulayabilirsiniz. Bazen basit bir optimizasyon, altyapı değişikliğinden daha verimli olabilir.

Sorduğunuz sorununun ikinci kısmı için ise, XML tabanlı bir yapıdır. Siz sorgunuzu bir kanal üzerinden yaparsınız, içerik XML ağacı olarak döner. Kanaldan kasıt bir web sitesinden php, asp ile navigasyon da olabilir, webservice üzerinden bir site veya yazılımdan xml request de. Yeri gelir bir TCP bağlantı sonucu da cevap döndürmek için kanal olarak kullanılır.

Öncelikle ilk paragrafa önem vermenizi salık veririm.
Resim Resim

Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 521
Kayıt: 05 May 2005 02:24
Konum: DelphiTürkiye.COM

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen hi_selamlar » 16 Mar 2015 02:49

Merhaba Hocam,

SQL cümlesi çok basit.

Kod: Tümünü seç

select adı, soyadı, yaş, cinsi from tablo
where tablo.yaş=25
Server olarak kiralık bir server kullanıyoruz. Gayet hızlı ve sorunsuz çalışıyor.
Windows APP DB server üzerinden çok hızlı sonuç döndürüyor.
Ama Android de sonuç çok ağır kalıyor.

Amacım, DataSnap ile bir server uygulama yazıp, verileri REST (JSON) ile çekip-düzeltmek-silmek
gibi işlemleri sağlamak. Herkes bu yapıyı öneriyor.
İşte benimde takıldığım nokta tam burası. DataSnap ile verileri nasıl işleme alıyoruz.

Nasıl bir yol yöntem izliyoruz. Hiç örnek uygulama bulamadım.
Video var, ama ne yaptıysam verileri çekemedim. :roll:
Herkes cahildir, bazi konularda.

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4717
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen mrmarman » 16 Mar 2015 03:00

Direkt erişimde yavaşlık teknik başka sorunları akla getiriyor ama üzerinde durmaya gerek görmüyorum.

Zaten mobil deyince DataSnap akla gelir. Bir örnek hazırlar buraya koyarım.

Şimdi İstanbul'a doğru otobüsteyim, gece 23.00 gibi bir aksilik olmazsa otelden yollarım.
Resim Resim

Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 521
Kayıt: 05 May 2005 02:24
Konum: DelphiTürkiye.COM

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen hi_selamlar » 16 Mar 2015 04:09

S.A. hocam.

Teşekkür ederim. Bu Arada hayırlı yolculuklar.. :)

İnanın örneğinizi dört gözle bekliyorum. Bir çok arkadaşa da referans olacaktır inşallah.

Verileri DataSnap (REST/JSON) ile çekip listelemek-düzeltmek-eklemek çok iyi olacaktır.

tekrar teşekkür ederim.
Herkes cahildir, bazi konularda.

Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 30 Eyl 2007 11:02
Konum: Ankara

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen Battosai » 16 Mar 2015 05:21

Aslında doğrudan bağlantı daha hızlıdır. Bu hız farkı fark edilmez. Datasnap kullanmanın hız ile bir alakası yoktur farklı sebebleri var. Ayrıca bunun internette bolca örneği olduğunu tahmin ediyorum. Her takıldığınızda böyle birilerinden yardım bekleyerek ilerlemek zaman kaybı. Programcı kişisi teknik düzeyde ingilizce bilmelidir. Yani ne aradığını ve bulduğu örneğin işine yarayıp yaramayacağını bilmelidir. Google'a "datasnap android example" yazınca ilk iki sırada mevzunun detaylı açıklaması var. Bilginize.

Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 521
Kayıt: 05 May 2005 02:24
Konum: DelphiTürkiye.COM

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen hi_selamlar » 16 Mar 2015 05:47

Battosai yazdı:Aslında doğrudan bağlantı daha hızlıdır. Bu hız farkı fark edilmez. Datasnap kullanmanın hız ile bir alakası yoktur farklı sebebleri var. Ayrıca bunun internette bolca örneği olduğunu tahmin ediyorum. Her takıldığınızda böyle birilerinden yardım bekleyerek ilerlemek zaman kaybı. Programcı kişisi teknik düzeyde ingilizce bilmelidir. Yani ne aradığını ve bulduğu örneğin işine yarayıp yaramayacağını bilmelidir. Google'a "datasnap android example" yazınca ilk iki sırada mevzunun detaylı açıklaması var. Bilginize.
Teşekkürler.

Android konusunda çok fazla teknik bilgiye sahip olmadığım için zaten yardım istiyorum. Forum amacı bu değilmi ?
Tabiki konuyu araştırıp, çözüm bulunamadığı durumlarda yardım istemek. Ama çözemedim.
Yardımcı olup olmamak size kalmış bir durum.

Tekrar teşekkürler..
Herkes cahildir, bazi konularda.

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4717
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen mrmarman » 17 Mar 2015 12:56

Merhaba.

Söz verdiğim DataSnap Örnek Projenin linkini veriyorum. Senin verdiğim vertabanı tipine göre Etüd projedir.
Sizin için (3) farklı proje hazırladım. Server, Desktop Client ve Mobil Client olmak üzere ...
İşlem ağacını daha önce resimler ile forumda paylaşmıştım. bkz. bu link

Şimdiki yazdığım da uygulama hali oldu böylece puzzle tamamlamış olduk.

MySQL veritabanı yapısını şöyle kurdum

Kod: Tümünü seç

function TForm1.VeriTabaninaBaglan( MemoLog: TMemo ): boolean;
Var
  strDataDizin : String;
  strDB        : String;
begin
  Try
  // MySQL veritabanı unsurları
    strDataDizin := ExtractFilePath(Application.Exename) +'\DATA'; // Database(ler)in bulunacağı ana klasör bu olsun...
    strDB        := strDataDizin + '\VERITABANI'; // Database MySQL için bir klasörden ibaret
    if NOT DirectoryExists( strDataDizin )
      then ForceDirectories( strDataDizin );
    if NOT DirectoryExists( strDB )
      then ForceDirectories( strDB );

    FDConnection1.Close;

    With FDPhysMySQLDriverLink1 do
    begin
      Release; // Var olan bağlantıları kapatır.. (yenisi için hazırlık için)
      DriverID     := 'MySQL';
      VendorLib    := ExtractFilePath(Application.Exename) + '\LIBMYSQLD.DLL';
      EmbeddedArgs.Text := ''
      + '--basedir='  + ExtractFilePath(Application.Exename) +';'
      //'datadir' ile verilen yerde bulunen her alt klasör birer Veritabanıdır.
      // onların da altında fiziksel tablolar olacak.
      + '--datadir='  + ExtractFilePath(Application.Exename) +'\DATA;'
      + '--language=' + ExtractFilePath(Application.Exename) +';'
      + '--skip-innodb;'
      + '--skip-networking;'
      ;
    end;

    With FDConnection1 do
    begin
      Connected   := False;
      LoginPrompt := False;
      Params.Clear;
        Params.Values['DriverID']     := 'MySQL';
        Params.Values['CharacterSet'] := 'utf8';
        // Database ise aslı astarı yukarıda verilen "datadir" içindeki bir klasördür...
        Params.Values['Database']     := 'VERITABANI';
      Connected     := True;
    end;

    With FDQuery1 do
    begin
      Active     := False;
      Connection := FDConnection1;
      SQL.Clear;
      SQL.Add( 'CREATE TABLE IF NOT EXISTS KisilerTablosu ( ' );
      SQL.Add( '  id     INT NOT NULL AUTO_INCREMENT PRIMARY KEY' );
      SQL.Add( ', Adi    VARCHAR(20) ' );
      SQL.Add( ', Soyadi VARCHAR(20) ' );
      SQL.Add( ', Yasi   INT         ' );
      SQL.Add( ', Cinsi  VARCHAR(01) ' );
      SQL.Add( ' )' );
      SQL.Add( 'CHARACTER SET latin5 COLLATE latin5_turkish_ci;');
      ExecSQL;
    end;

    MemoLog.Lines.Add( 'MySQL bağlantısı TAMAM...Herşey yolunda...');
    Result := True;
  Except on e:exception do
    begin
      MemoLog.Lines.Add( 'Bağlantı Sağlanamadı...'#13'Hata: "' + e.Message + '"' );
      Result := False;
    end;
  End;
end;
Bu kurduğum veritabanına örnek 3 kayıtlık içerik ekledim. Sen kendine göre düzenlersin.

Resim
Resim
Resim

Download linki için buraya tıklayın... 27 MB boyunda oldu. Exeleri ve APK dosyası da var da ondan...
Resim Resim

Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 521
Kayıt: 05 May 2005 02:24
Konum: DelphiTürkiye.COM

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen hi_selamlar » 17 Mar 2015 07:37

Hocam ellerinize sağlık.

Çok teşekkür ederim.
İnanın bu konu ve örneğiniz bir çok arladaşımıza (başta ben olmak üzere)
referans olacaktır.

Tekrar çok teşekkür ederim.

Hemen incelemeye başlayıp bilgi vereceğim burdan..

:bravo: :bravo: :bravo:
Herkes cahildir, bazi konularda.

Kullanıcı avatarı
burak_489
Üye
Mesajlar: 30
Kayıt: 20 Ara 2010 09:20

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen burak_489 » 17 Mar 2015 07:09

Merhaba

@mrmarman

bir kaç gündür buna benzer birşey yapmaya çalışıyordum.
mutlaka faydası olacaktır

ilginize teşekkürler.

Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 02:52

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen brs » 18 Mar 2015 07:35

Sayın Mmarman hakkınızı nasıl ödeyebilirim bilemiyorum...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...

zagerx
Üye
Mesajlar: 20
Kayıt: 18 Ara 2010 02:42

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen zagerx » 17 Nis 2015 04:04

Merhabalar
bende bu konuyla alakalı yaklaşık iki üç haftadır uğraşıyorum sayenizde datasnap kullanarak android ten bağlanıp sql den veri alabiliyorum.
Fakat veri tabanına insert update delete gibi işlemlerin nasıl yapıldığına bir örnek verebilirmisiniz şimdiden teşekkürler.

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4717
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen mrmarman » 17 Nis 2015 04:09

INSERT INTO
DELETE FROM
SELECT INTO
UPDATE SET
vb. sql komut dizileri yardıöıyla ExecSQL ederek ekleme silme güncelleme yapabilirsiniz.
Resim Resim

zagerx
Üye
Mesajlar: 20
Kayıt: 18 Ara 2010 02:42

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen zagerx » 17 Nis 2015 04:24

hocam özürdilerim yanlış anlaşıldım

datasnap aracılıgı ile android üzerinden yapmak istiyorum veri ekleme silme değiştirme olaylarını

sqlin kendisi ile alakalı bir sorunum yok datasnap kullanmayı anlamaya çalışıyorum çalıştığım firmada
küçük bir proje yapmak için uğraşıyorum sahadaki arkadaşların telefonlarından istenilen üç dört alanı doldurmaları yorumlarını yazabilecekleri bir
yazılım yapmak istiyorum amacım bu ilginize şimdiden teşekkürler

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4717
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: XE7-Android-REST(JSON) Uygulama ...

Mesaj gönderen mrmarman » 17 Nis 2015 04:44

Ana ( Desktop Projende )

Kod: Tümünü seç

  DataSetProvider1.DataSet        := ADOQuery1;
  DataSetProvider1.Options        := [poAllowCommandText]; // bu satır sayesinde Client'den SQL text yollayıp cevabını alabiliyoruz...
sayesinde, Android yakasındaki

Kod: Tümünü seç

    ClientDataSet1.Active := False;
    ClientDataSet1.CommandText :=  'SELECT * FROM KULLANICI';
    ClientDataSet1.Active := True;
Select gibi, aynı CommandText'e INSERT INTO, UPDATE, DELETE FROM satırlarını yazıp bu defa Active etmeyip Execute diyeceksiniz. Geri dönecek veri yok çünkü.

Açık bir veritabanı ise klasik yöntemler geçerli

Kod: Tümünü seç

ClientDataSet1.Insert;
ClientDataSet1.FieldByName('Adi).AsString := Edit1.Text;
ClientDataSet1.Post;

veya

ClientDataSet1.Edit;
ClientDataSet1.FieldByName('adi).AsString := Edit1.Text;
ClientDataSet1.Post;

İşlem sonunda da tüm bunları Server'a yollamak için ApplyUpdates çağırıcaz.

ClientDataSet1.ApplyUpdates(0);

veya vazgeçtin

ClientDataSet1.CancelUpdates;
Sıkıntı olursa örnek kod yazarım ama biraz çabalarsan sonuca ulaşacaksın.
Resim Resim

Cevapla