Android Http Post ve AsyncTask Kullanımı

Merhaba arkadaşlar. Bu dersimizde Android de Post işlemi nasıl yapılır ,Post ile nasıl variable gönderilir ve Asynctask sınıfı nasıl kullanılır onu öğreneceğiz.

AsyncTask  sınıfını kısaca açıklıyacak olursak kullanıcı uygulamayı kullanırken arka planda kullanıcıya çaktırmadan gerekli işlemleri yapmaya yarar.Fazla uzatmadan kodlara geçelim.

Burada Post işlemini PostClass ın içindeki httpPost metoduyla yaptık. Aslında bu uygulamada method kullanmaya gerek yoktu. Direk olarak da post işlemleri yapabilirdik ama büyük bir projede bu kodu sürekli yazıp tekrar edeceğimize bir method yazıp çağırmak daha mantıklı.

Şimdide httpPost methoduna bakalım

Burda unutmamamız gereken nokta ise AndroidManifest te internet bağlantısı için gerekli olan izini vermek.

Post ettiğimiz sunucudaki php dosyası ise şöyle:

Arkadaşlar kod üzerinde gerekli açıklamaları yapmaya çalıştım. Anlamadığınız yada takıldığınız bir yer olursa sorabilirsiniz.

Bir dahaki derste Android de JSON okumayı anlatmaya çalışacağım.O zamana kadar kendinize iyi bakın:)

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

Taha Kırca

iOS & Android & Apple Watch Developer, Mobilhanem.com yazarı, Karadeniz Uşağu, Ordu Sevdalısı, Anti Fenerbahçeli, Koyu Galatasaraylı

36 Yorum

  • Merhaba taha bey,

    veri_string değerini herhangi bir stringle karşılaştırma yaptığımızda cevap olumsuz oluyor nedenini bulamadım.

    örnek:
    string deneme = “cevap” // veri_string in döndürdüğü değerle aynı
    string test =”ABC”
    if(deneme.equals(veri_string)){
    Toast.makeText(getApplicationContext(),test, Toast.LENGTH_LONG).show(); //
    }

    • deneme.equals(veri_string) ancak deneme stringiniz ile veri_string değeriniz eşitse true döner. veri_string değerini log luyoruz. Log cat ten değerine bakabilirsiniz. Yada direk ekrana AlertDiaologbox ile veri_string değerini bastırıp gelen veriyi görebilirisiniz.

      • İlgin için teşekkür ederim. Sorunu buldum.

        Dikkat edersen post.class dosyasında veri_string sonuna “n” ilave edilmiş. buda bir alt satıra geçirdiği için gözükmüyordu. Karşılaştırmaya bunu ekleyince düzeldi.

        if ((deneme1 + “n”).equals(veri_string)){

        Toast.makeText(getApplicationContext(),”LED KAPALI”, Toast.LENGTH_LONG).show();
        }
        iyi çalışmalar…

  • üstad ben bi kaç veriyi hostumda bulunan php dosyasına göndermek ve kodları çalıştırmak istiyorum verdiğiniz örneğe göre bişeyler yaptım yalnız veri iletilmedi bende sizin kaynak kodu olduğu gibi kopyaladım ve php yide kopyaladım herşey aynı fakat butona tıkladığımda veriyi çekemedim sizin adresteki php ye yönlendirince çalışıyor ama çıkamadım bi türlü şu işin içinden

          • Taha hocam doğru söylemiş… Ben çalıştırdım.. Belki problemi çözmüş olabilirsiniz ama başka arkadaşlar için paylaşıyorum :

            Bazı modemlerde “loopback” denilen bir problem var… Yani; bu şu demek, aynı ağ üzerinden kendi sitenize ulaşamıyorsunuz… Bu nedenle; başka bir ağ üzerinden (ben client için mobil denedim) deneyin.. Şöyle ki; ben aynı ağda olduğu için; emulator üzerinde test edemiyorum.. Çünkü loopback problemi var… Hemen, apk’yı mobil cihaza indiriyorum ve (en önemlisi!!!) mobil ağ üzerinden uygulamayı çalıştırıyor ve “loopback” probleminden sıyrılıyorum.. Keşke olmasaydı tabii böyle bir problem 🙂

          • Üzerinden çok zaman geçmiş fakat benim de uygulamayı telefonda çalıştıramama problemim var.Emulatorde çalışıyor fakat telefonda çalışmıyor (php mysql baglantisi)
            Nasıl düzeltebilirim acaba

  • Teşekkür ederim çok işime yaradı. yalnız bir sorum olacak bu konuda çok yeniyim. AsyncTask kısmını override edilmiş bir metod mu yoksa kendimiz mi tanımladık? yani sdk kütüphanelerinde var mı yoksa sizin tanımladığınız fonksiyonlar mı?

    • Burdaki Asynctask bir method değil bir classdır.
      import android.os.AsyncTask; bu kod ile projemize import ediyoruz.
      Post classımıza extend ediyoruz ve artık Post Class ımızda Asnctask classın methodlarını kullanabiliyoruz.Yani sorunun cevabı AsyncTask bir method değil bir classdır.

      • Merhaba, direkt indirdiğim kodlarda önce import project şeklinde açtığımda karşıma çıkan 3 seçeneği de işaretleyip çalıştırdığımda sizin php dosyanızın içeriği toast mesajı olarak geliyor, fakat php dosyasını kendi server’ıma atıp çalıştırdığımda sleep metodunda hata aldım bu hosting ile alakalı olduğundan sleep metodunu silerek denediğimde toast mesajı boş gözüküyor. Sleep metodu ile ilgili olduğunu zannetmediğim halde farklı bir hostingde sleep ile birlikte denedim yine aynı şekilde toast mesaj içeriği boş geliyor. Anlayamadım. sakıncası yoksa php url ‘lerini yazabilir miyim?

  • MerhAba iyi günler.
    Bu yönetemi başarıylaçalıştırdım. kodlrın bunların aynısı ama burdan mı aldım başka yerdenmi yoksa karmamaı yaptım bilmiyorum. Neyse neticede. TEXT içerikli mesajı sunucuya gönderip çekebiliyorum.
    SORUM ŞU: Acaba Resim, Ses(aac), video vb file içerikli dosyaları nasıl sunucuya gönderip alabileceğiz. Gerçi resimi almayı yapıyorum. Amahepböyle farklı farklımı olucak.tek bir noktadan olmuyormu bu tümgönderme alma işlemleri hepsi için ayrı ayrı sayfalarca kod yazmam şartmı yani ?

  • merhaba,
    Bu kodları başarıyla çalıştırdım fakat şöyle bir sorun var. httpPost metodunu çağırırken time değerini 2000 verip sunucudaki php dosyasına sleep(5) koyduğum zaman uygulama patlıyor. Acaba timeOut durumunda bir alertDialog ya da Toast mesajı nasıl gösterebiliriz?

  • public String httpPost(String url, String method,List params,int time) {

    if (method == “POST”) {
    HttpParams httpParameters = new BasicHttpParams();
    …….
    }
    httpPost methodunu yazarken HttpParams classını görmüyor Android Studio. Nedeni nedir acaba?
    DefaultHttpClient classındada aynı sorun var. Http ile ilgili işlemlerde sıkıntı yaşanıyor?

    • android{
      useLibrary ‘org.apache.http.legacy’
      }
      Gradle içine adroid tagının altına yukarıdaki gibi
      useLibrary ‘org.apache.http.legacy’
      Ekleyip sync etmeyi dener misin?

  • Öncelikle çok teşekkür ediyorum, çok faydalı bir paylaşım. Program bu şekliyle çalışıyor. Fakat ben veritabanına alacağım veriler manuel olarak değil, editlerden gelsin istiyorum.

    Ama parametre olarak almama izin vermedi. örn: “taha” yazmayıp etUsername.getText().toString() yazdığımda editleri göremiyor.

    doInBackground metodu içerisinde bu editleri görebilmesi için ne yapmalıyım?

  • http get metoduyla gönderdiğimiz Linkler, Sniffer Programlarıyla “HTTP 200 OK” mesajları altında görünüyor.
    bunları gizlemenin yada bu mesajları kapatmanın bir yolu var mıdır ?

  • İyi günler, burada asenkron görevin sonucunda veri_string değişkenine değer atanıyor, bu asenkron görev sonucu döndürmek için bağlantı sebebiyle biraz geç sonucu döndürebiliyor. eğer asenkron görevden hemen sonra veri_string adlı değişeni kullanmaya kalkarsak muhtemelen yeni değer gelmeden eski değerini döndürecek. Çünkü asenkron görevler yeni proses gibi davranıyorlar ve ana proses o prosesin sonucunu beklemeden işlemine devam edecek. acaba veri_string değişkenine asenkron task sonucunda dönen değer atandıktan sonra kullanmamız için nasıl bir yöntem izlememiz gerekiyor? şimdiden teşekkürler.

    • veri_string’e değer doInBackgorund methodunda atanıyor. Siz işlemlerinizi onPostExecute methodunda yaparsanız o zaten doInBackground methodu işini bitirdiği zaman çağırılıyor.

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?