Android AsyncTask Kullanımı

 

Merhaba dostlar bugün sizlerle Android uygulamalarımızda AsyncTask kullanımına bakacağız. Ufak bir örnek uygulama örneğinin linkini yazının sonunda paylaşacağım. Yazıdaki PHP kodları ile kullanıldığında doğru şekilde çalışacaktır.

Bu örneğimizde uygulamamız bir server kodu ile iletişime geçecek (PHP kullanacağız.), PHP kodumuz bizden aldığı (POST) veriyi değiştirecek ve bize JSON halinde geri yollayacak. Burada PHP kodumuz, yolladığımız veriyi kullanırken çeşitli işler yapabilir bu uygulamanızın işlevine göre değişebilir (örneğin veritabanından gerekli verileri çekmek) ama biz bu örnekte veriyi alıp değiştirip geri yollamasına ve bunu uygulamamızda arka planda yapılmasına göz atacağız. Hemen başlayalım.

 

1. JSONParser Sınıfını Oluşturmak

İlk yapacağımız iş hali hazırda açık bir uygulamamız var ise onu açmak yoksa yeni bir android projesi oluşturmak ve yeni bir java sınıfı oluşturmak, adını da JSONParser koymak olacak.

JSONParser sınıfımız bizim HttpRequest yapabilmemizi sağlayacak, bu request ile PHP kodumuza verilerimizi yollayacabilecek ve uygulamamızdan çalıştırabileceğiz.

JSONParser.java:


package com.example.akilinc.asynctasktest;

import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    // url den json u
    // post ve get metodlarıyla almak
    public JSONObject makeHttpRequest(String url, String method,
                                      List params) {

        // HTTP request
        try {

            // request metod'un post mu get mi olduğunu kontrol et
            if(method == "POST"){
                // request metod = post
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();

            }else if(method == "GET"){
                // request metod = 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();
                is = httpEntity.getContent();
            }

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

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {

                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {

            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // String i JSONObject e parse etmeye çalış.
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}


JSONParser.java sınıfımızı ekledikten sonra ikinci işimiz JSONParser sınıfımızdaki fonksiyonların çalışabilmesi için gerekli Apache Http Client kütüphanesini build.gradle dependencies’leri içine eklemek.

 

2. Apache Http Client Kütüphanesini Eklemek

Uygulamamızda build.gradle(Module: app) dosyasını açalım ve dependencies kısmına kütüphanemizi aşağıdaki gibi ekleyelim:

dependencies {
...
    implementation 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
...
}

 

3. Uygulamamıza Internet Kullanabilmesi için Permission Vermek

Uygulamamızın uzak yerdeki kodumuza erişebilmesi ve HttpRequest yapabilmesi için internete ihtiyacı var, eklemek için manifest dosyamızı açalım ve application taglerinden önce internet iznimizi ekleyelim.




 

4. AsyncTask ile HttpRequest yapmak istediğimiz Sınıfın oluşturulması

Kod üzerinde açıklaması daha anlaşılır olacağı için kodumun üzerine yazdım dostlar tüm gerekli açıklamaları.

MainActivity.java:


package com.example.akilinc.asynctasktest;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    String degisken; //String değişkenimizi tanımladık.

    private ProgressDialog pDialog; //arkaplanda http işlemlerimizi yaparken kullanıcıya gösterilecek Loader

    //php connections
    JSONParser jsonParser = new JSONParser();   //JSONParser sınıfımızdan nesne oluşturduk
    private static String phpUrl = "";  //php dosyamızın yolu, eğer localhostta ise localhost yolu
    private JSONObject json;    //JSONObject nesnemiz, gelen json un içinden istediğimiz veriyi alabilmek için

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        degisken = "14";    //degiskenimize değer atadık.

        new AsyncTaskTest().execute();  //asyncTask fonksiyonumuzu çalıştırdık.
    }

    class AsyncTaskTest extends AsyncTask{    //asyncTask sınıfımızı çalıştırdık

        @Override
        protected void onPreExecute() {     // asyncTask sınıfımızın ilk fonksiyonu OnPreExecute,
                                            // burada HttpRequest başlayıp bitene kadar ki kısımda
                                            // neler olmasını istediğimizi kodluyoruz.
                                            // biz dialog ile bir Loader ve mesaj gösterdik.

            super.onPreExecute();
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Değişken yollanıyor...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        protected String doInBackground(String... args){    // ikinci fonksiyonumuzda ise arkaplanda
                                                            // yapılacak işlerimiz olacak.

            // Building Parameters
            List params = new ArrayList<>(); // yeni bir arrayList oluşturduk,
                                                            // burada webservisimize yollayacağımız
                                                            // parametreler olacak.

            params.add(new BasicNameValuePair("degisken", degisken));     // parametre olarak sadece
                                                                                // degisken adlı değişkenimizi yolluyoruz.

            json = jsonParser.makeHttpRequest(phpUrl,       // HttpRequestimizin urlsini, metodunu ve parametreleri belirledik.
                    "POST", params);

            // check log cat for response
            Log.d("Create Response", json.toString());

            return null;
        }

        protected void onPostExecute(String file_url){      // üçüncü fonksiyonumuzda ise arkaplan
                                                            // işlemlerimiz bittikten sonraki işlemlerimiz olacak.

            pDialog.dismiss();                       // dialog'u kapatıyoruz.

            try {

                int kontrol = json.getInt("success");       // gönderdiğimiz JSON'da bir adet int değerini aldık.
                String degisken = json.getString("degisken");   // JSON içindeki String değeri de aldık.

                if (kontrol == 1){

                    Toast.makeText(getApplicationContext(), degisken, Toast.LENGTH_LONG).show();

                    //startActivity(new Intent(OlcumOrtamBilgileri.this, OlcumNoktalariEkle.class));
                }

                else{

                    Toast.makeText(getApplicationContext(), "Başarısız.", Toast.LENGTH_LONG).show();
                }
            }
            catch (JSONException e) {

                e.printStackTrace();
            }
        }
    }
}


 

5. PHP Server Kodumuzu Oluşturmak

Üstlerde de dediğim gibi ufak bir PHP kodumuz olacak, uygulamadan verimizi alacak ekleme yapacak ve geri yollayacak, gerçek hayat senaryolarında PHP dosyamız ile veritabanı işlemleri gibi işlemler de yaptırılabilir ve uygulamaya gerekli sonuç JSON olarak döndürülebilir.

asyncandroidtest.php adında bir PHP dosyası oluşturalım ve içini şu şekilde dolduralım.

asyncandroidtest.php:




Evet dostlar bugün sizlerle Android uygulamalarında asyncTask kullanımını konuştuk ve PHP ile nasıl haberleştiğini anlattık. Umarım yardımcı olabilir bu örnek size. Yukarıda söz verdiğim gibi örnek uygulamamın github linkini şuradan erişebilirsiniz.

ahmet

Ahmet Kılınç - Software Developer

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.