Kayıt Ol

Giriş

Şifremi Kaybettim

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Giriş

Kayıt Ol

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi adipiscing gravdio, sit amet suscipit risus ultrices eu. Fusce viverra neque at purus laoreet consequa. Vivamus vulputate posuere nisl quis consequat.

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.

Yazar Hakkında

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

    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(); //
    }

    • Taha Kırca

      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.

      • oguz

        İ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…

        • Taha Kırca

          Teşekkür ederim. Takildiginiz yer olursa sorabilirsnz.Elimden geldigince yardim ederim.

  • Halil İbraihm KÜLEY

    Mükemmel bir yazı olmuş bende bununla ilgili hemen bir yazı yazacağım . . .

    • Taha Kırca

      Teşekkür ederim. Faydali olduysa ne mutlu:)

  • Hakkı Şahin

    ü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

    • android manifeste internet iznini verdin mi?

      • Hakkı Şahin

        tabiki verdim hostumla ilgili değildir değilmi
        verdiğim izinler

        • localhost tan mı çalışıyorsun. Yoksa gerçek sunucudan mı?

          • Hakkı Şahin

            gerçek sunucudan çalıştırıyorum karacalarmuhendislik.com/satis.php

          • vakan

            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 🙂

          • Elif

            Ü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

  • AEK

    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, öncelikle teşekkürler. Post çalışmıyor null dönüyor fakat get olarak çalışıyor nedeni ne olabilir acaba?

    • Çalışmıyor dediğiniz sizin kendi kodunuz mu? Burdaki projeyi indirip denediğinizde mi hata alıyorsunuz?

      • 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?

        • Direk kendimiz kontrol etmiyoruz.Peki methodu Get yaptığınızda çalışıyor mu?

          • Evet, metodu get olarak değiştirince mesaj içeriği geliyor. Sorunun kaynağını çözebilmek için Logcat’den mi bakmalıyım acaba?
            Link: http://ardagokbulut.com/android/httpPostAsyncTask.php
            Kod içeriği
            echo “ardagokbulut.com Http Post + Asynctask Dersi”;

          • Benimde aklımda bişi canlanmadı aklıma şu geliyor htaccess de farklı bir yönlendirme olabilir mi ?

          • Taha Bey, htAccess ‘i kontrol ettim fakat normal gözüküyor. Hiç htaccess olmayan bir url’de de çalıştıramadım. Sizden ricam sizdeki uygulama benim url üzerinden çalışıyor mu acaba kontrol etme imkanınız var mı?

  • Eyüp Kaya

    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 ?

  • highaxi

    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?

  • enis

    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?

  • Şebnem Tezcan

    Ö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?

  • Ö’mer Faruk K.

    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 ?

    • HTTP 200 Ok Demek serverdan cevabın başarıyla alındığı demektir.

  • GadaBex

    PostClass’ları Tanımıyor Program Kırmızı Renk Atıyor Ne Yapmam gerek ?

  • Pingback: Android Firebase Cloud Messaging ile Push Notification Göndermek - Mobilhanem()

  • NewCoder

    İ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.

  • Pingback: Android Service Kullanımı ve Service HttpPost-Notificaton()