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