#11 – Android HTTP Requests: Android’ten Web Server ile İletişime Geçelim!


Merhaba, bu yazıda android ten web server ile iletişime geçen bir uygulamanın yapımı adım adım anlatılmıştır.

[wpdm_file id=9]

Android telefonumuzdan yazdığımız bir mesajı gönder butonuna basarak istediğimiz bir web sayfamızın istediğimiz bir sayfasına gönderip ve de bu mesajları o sayfaya yazdıracağız. Evet Başlayalım!

Android iki tane HTTP client içerir bunlar: HttpUrlConnection ve Apache Client. Biz bu dersimizde Apache Client altındaki DefaulHttpClient sınıfını kullacağız. Bu sınıf http istekleri(requests) yapmamıza olanak verir ki bu da tam olarak bizim istediğimiz şey. Artık gerekli adımlara geçebiliriz.

Gerekli Adımlar:

1. Eclipse te yeni bir android projesi oluşturup bir isim verin.

2. İlk önce arayüzü oluşturalım. Bir başlık tabımız, bir mesaj kutumuz ve bir de gönder butonumuz olsun. Bunlar için aşağıda verdiğim kodu main.xml dosyasına girin. Bu kodları daha önce de kullandığımız için tekrar açıklamasını yapmıyorum. Açıklamaları için önceki derslerimize göz atabilirsiniz.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Android HTTP POST ile mesaj yollama"
    android:background="#0470d9"
    android:textColor="#fff"
    android:textSize="20dp"
    android:textStyle="bold"

    />

<TextView
    android:layout_marginTop="10dp"
    android:id="@+id/msj"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Mesaj: "
     android:textColor="#fff"
     android:textSize="20dp" />

<EditText
     android:layout_marginTop="5dp"
    android:id="@+id/edmesaj"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10" >

    <requestFocus />
</EditText>

<Button
    android:id="@+id/gndr"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Gönder" 
    android:onClick="send"/>

</LinearLayout>

3. Uygulamamızda interneti kullanmamız gerektiğinden dolayı AndroidManifest.xml dosyasına aşağıda verdiğim internet iznini ekleyin:

   <uses-permission android:name="android.permission.INTERNET" />

4. main.java ya da projenizin_ismi.java dosyasına aşağıda verdiğim kodları girin. Kodların açıklamaları aşağıda verilmiştir. Okumayı ihmal etmeyin. :)

package com.androidevreni.httprequests;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;

public class AndroidHTTPRequestsActivity extends Activity {

	// değişkenleri giriyoruz
	EditText msg;
	String mesaj;

	// HTTP client oluşturuyoruz
	HttpClient httpClient = new DefaultHttpClient();
	// HTTP post oluşturuyoruz

			HttpPost httpPost = new HttpPost(
					"web-sayfanızın-adresi");

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// nesneye ulaşıyoruz
		msg = (EditText) findViewById(R.id.edmesaj);

	}

	public void send(View v) {

		// mesajı kutudan alıp string e çeviriyoruz
		mesaj=msg.getText().toString();

		// post parameterlerini oluşturuyoruz
		// bunlar key(anahtar) ve value(değer)
		List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
		nameValuePair.add(new BasicNameValuePair("email", "user@gmail.com"));
		nameValuePair.add(new BasicNameValuePair("message",
				mesaj));

		// post parametrelerini url ye ekliyoruz
		try {
			httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
		} catch (UnsupportedEncodingException e) {
			// hata varsa loga yazdırıyoruz
			e.printStackTrace();
		}

		// HTTP isteğini yapıyoruz
		try {
			HttpResponse response = httpClient.execute(httpPost);

			// cevabı loga yazdırıyoruz
			Log.d("Http Response:", response.toString());
		} catch (ClientProtocolException e) {

			e.printStackTrace();
		} catch (IOException e) {

			e.printStackTrace();

		}
	}		
}

 5. Bu adımdan sonra server tarafını ayarlamamız gerekiyor. Bunun için web sayfanızda yeni bir sayfa açıp url den post parametlerini seçip alan ve bu değerleri bir dosyaya yazdıran php scripti yazmanız yeterlidir. Daha sonra bu dosyanın içeriğini de bir sayfanıza yazdırabilirsiniz. Bu şekilde uygulamamızdan gönderdiğiniz mesajımız direk istediğimiz sayfamızda görülücektir. Evet web ile iletişime geçtik, aşağıdaki videoyu izleyin!

6. Uygulamamızı Test Ediyoruz:

Bir Android yazısının daha sonuna geldik :). Yeni yazılar için Android Evreni‘ni Takip Etmeye Devam Edin.
Kolay gelsin. :)

Şunlar da ilginizi çekebilir

35 yorum

  • limewire free download
    25 Eylül 2013 at 10:55

    do you have a twitter that i can follow

    • Admin
      25 Eylül 2013 at 15:07

      Hi, you can follow the new articles and tutorials using our Facebook or Google+ page or you can subscribe to our newsletter using register form in the right sidebar just by entering your email and activating it by using the email will be sent you! :)

  • ibrahim
    12 Ekim 2013 at 10:15

    Kolay gelsin
    programı yüklediğimde

    public class AndroidHTTPRequestsActivity extends Activity {

    kısmında hata aldım buradaki AndroidHTTPRequestsActivity i main_activity şeklinde değiştirdim.
    Programı derlediğimde ise Exception hatasına düştü log kayıtlarıma baktığımda ise

    HttpResponse response = httpClient.execute(httpPost);

    kısmında hata verdi acaba nerede yanlış yaptım.
    saygılarımla

    • Admin
      12 Ekim 2013 at 18:53

      merhaba İbrahim bey,
      size yardımcı olabilmem için log kayıtlarının tamamını görmem gerekiyor. Buraya yorum olarak yazabilirseniz yardımcı olurum.

  • ibrahim
    12 Ekim 2013 at 20:49

    10-12 13:47:57.644: W/dalvikvm(858): threadid=1: thread exiting with uncaught exception (group=0x41465700)
    10-12 13:47:57.754: E/AndroidRuntime(858): FATAL EXCEPTION: main
    10-12 13:47:57.754: E/AndroidRuntime(858): java.lang.IllegalStateException: Could not execute method of the activity
    10-12 13:47:57.754: E/AndroidRuntime(858): at android.view.View$1.onClick(View.java:3633)
    10-12 13:47:57.754: E/AndroidRuntime(858): at android.view.View.performClick(View.java:4240)
    10-12 13:47:57.754: E/AndroidRuntime(858): at android.view.View$PerformClick.run(View.java:17721)
    10-12 13:47:57.754: E/AndroidRuntime(858): at android.os.Handler.handleCallback(Handler.java:730)
    10-12 13:47:57.754: E/AndroidRuntime(858): at android.os.Handler.dispatchMessage(Handler.java:92)
    10-12 13:47:57.754: E/AndroidRuntime(858): at android.os.Looper.loop(Looper.java:137)
    10-12 13:47:57.754: E/AndroidRuntime(858): at android.app.ActivityThread.main(ActivityThread.java:5103)
    10-12 13:47:57.754: E/AndroidRuntime(858): at java.lang.reflect.Method.invokeNative(Native Method)
    10-12 13:47:57.754: E/AndroidRuntime(858): at java.lang.reflect.Method.invoke(Method.java:525)
    10-12 13:47:57.754: E/AndroidRuntime(858): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    10-12 13:47:57.754: E/AndroidRuntime(858): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    10-12 13:47:57.754: E/AndroidRuntime(858): at dalvik.system.NativeStart.main(Native Method)
    10-12 13:47:57.754: E/AndroidRuntime(858): Caused by: java.lang.reflect.InvocationTargetException
    10-12 13:47:57.754: E/AndroidRuntime(858): at java.lang.reflect.Method.invokeNative(Native Method)
    10-12 13:47:57.754: E/AndroidRuntime(858): at java.lang.reflect.Method.invoke(Method.java:525)
    10-12 13:47:57.754: E/AndroidRuntime(858): at android.view.View$1.onClick(View.java:3628)
    10-12 13:47:57.754: E/AndroidRuntime(858): … 11 more
    10-12 13:47:57.754: E/AndroidRuntime(858): Caused by: android.os.NetworkOnMainThreadException
    10-12 13:47:57.754: E/AndroidRuntime(858): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
    10-12 13:47:57.754: E/AndroidRuntime(858): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
    10-12 13:47:57.754: E/AndroidRuntime(858): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
    10-12 13:47:57.754: E/AndroidRuntime(858): at java.net.InetAddress.getAllByName(InetAddress.java:214)
    10-12 13:47:57.754: E/AndroidRuntime(858): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
    10-12 13:47:57.754: E/AndroidRuntime(858): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    10-12 13:47:57.754: E/AndroidRuntime(858): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    10-12 13:47:57.754: E/AndroidRuntime(858): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    10-12 13:47:57.754: E/AndroidRuntime(858): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    10-12 13:47:57.754: E/AndroidRuntime(858): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    10-12 13:47:57.754: E/AndroidRuntime(858): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    10-12 13:47:57.754: E/AndroidRuntime(858): at com.example.androidphp.main.send(main.java:66)
    10-12 13:47:57.754: E/AndroidRuntime(858): … 14 more

    • Admin
      12 Ekim 2013 at 21:38

      FATAL EXCEPTION :main hatasının nedeni birden fazla şey olabilir,.java uzantılı activity kodlarınızı görmem gerekiyor. Ancak yazımda anlattığım adımları takip ettiyseniz ve gerekli kısımları kendi web serverınıza göre ayarladı iseniz çalışması gerekir.

      • ibrahim
        13 Ekim 2013 at 11:59

        java dosyasını adresinize mail olarak attım.

        • Admin
          13 Ekim 2013 at 13:40

          Hocam size düzeltilmiş ve çalışan halini email atıyorum. Dikkat etmeniz gereken şeyler şunlar:

          1. Java dosyasındaki sınıfın ismi java dosyasının ismi ile aynı olmalıdır. Yani eğer java dosyasının ismi ‘MainActivity.java’ ise sınıfın ismi de MainActivity olmalıdır. Yani şöyle başlamalıdır:

          public class MainActivity extends Activity

          2. XML dosyasında oluşturduğumuz nesnelere java dosyasından ulaşırız. XML dosyasında oluşturduğumuz nesnelerin isimleri(idleri) ile onlara ulaşırız. Buna dikkat etmek gerekir, aksi takdirde eclipse hata verecektir.

          3. AndroidManifest.xml dosyasına internet izni ile ilgili kodu eklemeniz gerekir. İnterneti kullandığımız için. Kodu aşağıda verdim tekrar.

          4. Bir de nereye göndermek istiyorsanız o web sayfada bir php scripti olmalıdır, gelen mesajları ne yapmak istediğinize göre bu scripti yazmalısınız. Mesela size bir örnek vereyim:

          ——PHP KODUMUZ———–
          <?php

          // get the "message" variable from the post request
          // this is the data coming from the Android app
          $message=$_POST["message"];

          echo $message;

          // specify the file where we will save the contents of the variable message
          $filename="androidmesajdosyamiz.html";

          // write (append) the data to the file
          if ($message!=null) {
          file_put_contents($filename,$message,FILE_APPEND);
          file_put_contents($filename,"
          “,FILE_APPEND);
          }
          // load the contents of the file to a variable
          $androidmessages=file_get_contents($filename);

          // display the contents of the variable (which has the contents of the file)
          echo $androidmessages;

          ?>
          ———–PHP KODUMUZUN SONU———–

          Bu dediğim düzenlemeleri sizin gönderdiğiniz koda yaptıktan sonra sıkıntısız çalıştı.

          Umarım yardımcı olabilmişimdir, kolay gelsin..

        • Admin
          13 Ekim 2013 at 15:01

          İbrahim bey, projeyi oluştururken minSDKVersion default olarak ‘2.2 versiyonu’ seçilidir. Onu 4.3 yaparsanız emülatörde büyük ihtimal çalışacaktır. Bu versiyon değerini AndroidManifest.xml dosyasından da değiştirebilirsiniz.

          • ibrahim
            13 Ekim 2013 at 15:30

            Çok teşekkürler ilginiz için.Elinize sağlık

            • Admin
              13 Ekim 2013 at 17:03

              Rica Ederim. Her zaman :)

  • A.D
    12 Kasım 2013 at 15:38

    PHP SCRİPTİ ve projenin kaynak dosyalarını paylaşabilir misiniz?

    • Admin
      21 Kasım 2013 at 07:19

      Merhaba A.D, yoğunluğumdan dolayı pek ilgilenemedim blogumla bir süredir. Kaynak kodları ve Php scripti bugün derse ekleyeceğim, indirirsiniz :)

  • Vohaa Design
    31 Aralık 2013 at 16:24

    Uygulama Source ünü ve PHP Scripti paylaşmamışsınız sanırım , en kısa zamanda paylaşabilir misiniz ?

    • Admin
      4 Ocak 2014 at 03:38

      merhaba, kaynak kod ve PHP script derse eklenmiştir. Oradan indirebilirsiniz. Kolay gelsin.

  • Martyr
    18 Ocak 2014 at 21:24

    Hocam hocam :-) Android dersleriniz cok guzel ins. hizinizi kesmezsiniz :-) Bu konu da cok acik var ya =-O

  • tahsin
    14 Şubat 2014 at 12:16

    Merhaba, aslında çok önemli olan ve yeteri kadar bilgi bulunmayan bir konuda danışmak istedim. yapacağım android uygulamasında anlık olarak web serviceden data alışverişi sağlamam gerekiyor.Örn:borsa döviz takibi gibi uygulamalar var şuan.anlık olarak yeni veriler ekleniyor yada güncelleniyor. facebooktaki sayfa yenilenmeden eklenen haber akışları yada bildirimler gibi.Yapmak istediğim web sitemizden anlık olarak verilerin uygulamamıza akması. bu nasıl yapılıyor nasıl yapılabiliri. Teşekkür ederim şimdiden paylaşımlarınızı bekliyoruz.

    • MUSTAFA DEMİR
      17 Mart 2014 at 20:44

      merhaba,
      şuan çok yoğunum, dediğiniz konu hakkında bir örnek hazırlayıp bir ders olarak yayınlayacağım. Üzgünüm şuan vaktim yok.

  • ADEM
    17 Mart 2014 at 20:28

    Admin bir konuda yardımına ihtiyacım var android eclipse üzerinden twitter da paylaşım yapmam gerekiyor nasıl bir yol izlemem gerek hiç bilmmedğim bi yazılım

  • ADEM
    17 Mart 2014 at 20:29

    yardımcı olursan çok sevinirim

  • ADEM
    18 Mart 2014 at 16:52

    admin androidten twitterda paylaşım yapmam gerekiyo bu konuya benzer mi acaba yardımcı olur musun

  • ADEM
    18 Mart 2014 at 18:28

    admin ilgin için teşekkürler ama nasıl bir yol izliyceğimi anlamadım neleri yüklemem gerek internet sitesi ingilizce çeviri yapıyorum ama bir şey anlamadım yardımcı olursan çok sevinirim ben bilgisayarıma eclipse yükleyip bu progamdan twitterde paylaşım yapmamı sağlıcak olan programı yapmam lazım konum bu türkçe bir site bulabilirmiyim nerelerde aramam lazım ilgili olduğun için çok saol :)

    • MUSTAFA DEMİR
      18 Mart 2014 at 19:43

      merhaba,

      sorunuzu net olarak açıklamanız gerekiyor. Anladığım kadarıyla sizin probleminiz bir android uygulaması yazmak değil. Eğer öyle ise, sadece twitter da paylaşım yapmanızı sağlayacak bir program yazmanız gerekiyorsa durum değişir. “Java ile twitter da paylaşım, java ile tweet atmak” tarzı anahtar kelimeler ile arama yaparsanız bazı kaynaklar bulabilirsiniz.

      İyi çalışmalar.

  • ADEM
    19 Mart 2014 at 14:37

    android eclipse ile twitterda paylaşım yapmamı sağlıcak olan program kodları lazım bana nerde bulablirim

    • MUSTAFA DEMİR
      19 Mart 2014 at 18:11

      merhaba Adem bey,

      android ve eclipse birbirinden çok farklı şeyler. Eclipse bir IDE(Integrated Development Environment) dir. Android ise bir işletim sistemidir. Lütfen önce bunların ne olduğunu öğrenip sorunuzu düzgün şekilde sorun. Şuan probleminizi düzgün şekilde dile getiremiyorsunuz. Sorunuz açıklayıcı, düzgün ve net olmazsa size yardımcı olamam. İkincisi araştırmanızı kendiniz yapmak zorundasınız. Benden direk kodları istemeniz doğru değil.

      İyi çalışmalar.

  • Muhammet
    10 Ocak 2015 at 01:09

    Mustafa hocam merhaba, sitenizi takip ediyorum
    benim basit bir sorum olacak örneğin: xxx.com e-ticaret sitemizi apk ya nasıl çeviririz bunun için siteler var ama reklamlarıyla dolduruyorlar ve güvenemiyoruz . sitenizde rastlayamadık bu konuya. şimdiden teşekkür ederiz.

    • MUSTAFA DEMİR
      15 Ocak 2015 at 11:35

      merhaba Muhammet bey,

      ileri seviyede bir uygulama yapmak istemiyorsanız webview kullanabilirsiniz. İleri seviyede mesela bahsettiğiniz örnekler gibi bir uygulama düşünüyorsanız birkaç bloktan oluşmak zorunda olacak ve bir süreç alacaktır. Siz nasıl bir uygulama düşünüyorsunuz websiteniz için?

  • gizem
    14 Ocak 2016 at 13:21

    php dosyasının ıcıne baska herhangı bısey yazıyormuyuz peki ,bende hata verip durduruyor.

    • mustafa_demir
      19 Şubat 2016 at 19:51

      Hatayı buraya yazarsanız yardımcı olabilirim

  • kadir
    7 Mart 2016 at 02:51

    Ben mi göremiyorum yoksa yapılmamış mı? Anlayamadığım bi nokta var… Gönder isminde bi button var ancak java kısmında tanımlanmamış ve

    ve java kısmında SendMessage isminde bi method var ama o method bir buttonun click eventinde çağırılmamış…

    button1.onclickListener gibi bir kullanım göremiyorum…

    o halde sendmessage nasıl tetikleniyor?

    • mustafa_demir
      10 Mart 2016 at 18:00

      layout dosyasında button tanımlarken: android:onClick=”send” ifadesi ile button a dokunulduğunda send(View v) metodu çağırılır. İllaki setOnClickListener demeye gerek yoktur.

Admin için bir cevap yazın Cevabı iptal et