Android'de http isteğinde bulunmak

Android uygulamaların çoğunda internete baglanıp orada bulunan herhangi bir kaynaga erisim çok önemli bir yer tutmaktadır. Örnek verecek olursak listelenmesini istediğimiz ürünleri herhangi bir internet adresinden çekmemiz gerekiyor. Bu durumda bu adrese http isteğinde bulunmamız gerekmektedir. Bu istekler GET veya POST olarak gerçekleştirilebilmektedir. POST olması durumunda parametrelerin setlenmesi önemli bir konu olarak karşımıza çıkmaktadır. Şimdi http isteğinin nasıl gerçekleştirildiği ile alakalı kodlamayı inceleyelim.

1. HttpClient ve HttpPost oluşturulması : 
Aşağıdaki kodlamada uygulamamıza ait http clienti ve http post isteği oluşturulmaktadır. Örnek link olarak http://yazilimdersi.info/urunlerlistesi kullandım. Bunu kendinize ait herhangi bir link ile değiştirebilirsiniz:
# http clienti oluşturuldu.
HttpClient httpClient = new DefaultHttpClient();
 
# http post oluşturuldu.
HttpPost httpPost = new HttpPost("http://yazilimdersi.info/urunlerlistesi");
2. Post parametrelerinin hazırlanması : 
Aşağıdaki kodlamada örnek verilen linke erişim esnasında gönderilecek parametrelerin setlenmesi sağlanmaktadır:
# ulke ve sehir parametreleri setlenmektedir.
List<NameValuePair> ulkeSehirParametreleri = new ArrayList<NameValuePair>(2); 
ulkeSehirParametreleri.add(new BasicNameValuePair("ulke", "Turkiye")); 
ulkeSehirParametreleri.add(new BasicNameValuePair("sehir", "Ankara"));
3. Post edilecek verilerin urlencode edilmesi : 
Aşağıdaki kodlamada post verisi olarak hazırlanan parametrelerin nasıl urlencode edildiği gösterilmektedir. Burada UrlEncodedFormEntity metodu kullanılmaktadır:
# post parametrelerinin urlencode edilmesi 
try { 
    httpPost.setEntity(new UrlEncodedFormEntity(ulkeSehirParametreleri)); 
    } catch (UnsupportedEncodingException e) { 
    # hataların loglara yazılması
    e.printStackTrace(); 
}
4. Http isteğinin yapılması : 
Son olarak http isteğinin gerçekleştirilmesine geldi sıra. Burada da execute() metodu önemli bir işlem göstermektedir:
# http isteğinin yapılması 
try { 
    HttpResponse response = httpClient.execute(httpPost); 

    # dönen sonuçların görüntülenmesi
    Log.d("Http Response:", response.toString()); 
} catch (ClientProtocolException e) { 
    # hataların loglara yazılması 
    e.printStackTrace(); 
} catch (IOException e) { 
    # hataların loglara yazılması 
    e.printStackTrace(); 
}
Yukarıda yazılan kodlama ile birlikte http isteği gerçekleştirilmiştir. Aşağıda bu kodların tümünün görüntülendiği sınıfa ait kodlama bulunmaktadır:
package com.androidhive.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; 

public class AndroidHTTPIstegiActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
  
        # http isteği oluşturuldu. 
        HttpClient httpClient = new DefaultHttpClient(); 
        # http post isteği oluşturuldu. 
        HttpPost httpPost = new HttpPost("http://yazilimdersi.info/urunlerlistesi"); 
        # parametrelerin setlenmesi
        List<NameValuePair> ulkeSehirParametreleri = new ArrayList<NameValuePair>(2); 
        ulkeSehirParametreleri.add(new BasicNameValuePair("ulke", "Turkiye")); 
        ulkeSehirParametreleri.add(new BasicNameValuePair("sehir", "Ankara")); 
        # post parametrelerinin urlencode edilmesi
        try { 
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair)); 
        } catch (UnsupportedEncodingException e) { 
            # hataların loglara yazılması
            e.printStackTrace(); 
        } 
 
        # http isteğinin gerçekleştirilmesi
        try { 
            HttpResponse response = httpClient.execute(httpPost); 
            # hataların loglara yazılması
            Log.d("Http Response:", response.toString()); 
        } catch (ClientProtocolException e) { 
            # hataların loglara yazılması
            e.printStackTrace(); 
        } catch (IOException e) { 
            # hataların loglara yazılması 
            e.printStackTrace(); 
        } 
    } 
}
 
comments powered by Disqus