Site icon Mobilhanem

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.

[wpdm_file id=1]
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
	Button buton;
	ProgressDialog pDialog;
	String url = "http://www.mobilhanem.com/test/deneme.php";
	String veri_string;
	PostClass post = new PostClass();  //Post Class dan post adında nesne olusturduk.Post classın içindeki methodu kullanabilmek için
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		buton = (Button)findViewById(R.id.button1);
		buton.setOnClickListener(new View.OnClickListener() { //buton a click listener ekledik

			public void onClick(View v) {
				new Post().execute(); //Asynctask Classı Çağırıyoruz
			}
		});

	}

	class Post extends AsyncTask<Void, Void, Void> {

		protected void onPreExecute() { // Post tan önce yapılacak işlemler. Yükleniyor yazısını(ProgressDialog) gösterdik.
 	        pDialog = new ProgressDialog(MainActivity.this);
	        pDialog.setMessage("Yükleniyor...");
	        pDialog.setIndeterminate(true);
	        pDialog.setCancelable(false); // ProgressDialog u iptal edilemez hale getirdik.
	        pDialog.show();
	    }

	    protected Void doInBackground(Void... unused) { // Arka Planda yapılacaklar. Yani Post işlemi

            List params = new ArrayList(); //Post edilecek değişkenleri ayarliyoruz.
            //Bu değişkenler bu uygulamada hiçbir işe yaramıyor.Sadece göstermek amaçlı
            params.add(new BasicNameValuePair("isim", "taha"));
    		params.add(new BasicNameValuePair("mail", "taha@xxxx.com"));

            veri_string = post.httpPost(url,"POST",params,20000); //PostClass daki httpPost metodunu çağırdık.Gelen string değerini aldık

            Log.d("HTTP POST CEVAP:",""+veri_string);// gelen veriyi log tuttuk

            return null;
	    }

	    protected void onPostExecute(Void unused) { //Posttan sonra
	    	pDialog.dismiss();  //ProgresDialog u kapatıyoruz.
	    	Toast.makeText(getApplicationContext(),veri_string, Toast.LENGTH_LONG).show(); //Gelen veriyi Toast meaj ile 3 sn boyunca gösterdik
	    }
	}

}

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

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

        //url: post yapılacak adres
		//method: post mu get mi
		//params:post edilecek veriler değişkenler
		//time: sunucudan cevap gelmezse kaç sn sonra uygulama donmadan postun iptal edileceği
        try {

            if (method == "POST") {

            	HttpParams httpParameters = new BasicHttpParams();
            	int timeout1 = time;
            	int timeout2 = time;
            	HttpConnectionParams.setConnectionTimeout(httpParameters, timeout1);
            	HttpConnectionParams.setSoTimeout(httpParameters, timeout2);
                DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                veri =  httpEntity.getContent();

            } else if (method == "GET") {

                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);

                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                veri =  httpEntity.getContent();
            }

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    veri, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            veri.close();
            veri_string = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Hata " + e.toString());
                 }

        return veri_string; // Aldığımız cevabın string halini geri dönüyoruz

    }

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

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

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

<?php
sleep(3); // Yükleniyor yazısının daha uzun gözükmesi için
echo "mobilhanem.com Http Post + Asynctask Dersi";
?>

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.

[wpdm_file id=1] 13
Exit mobile version