Android Volley Kullanımı Ve JSON Parse Etme

Merhaba Arkadaşlar,

mobilhanem.com üzerinden anlattığım ilk dersim. Bu dersimizde Android’de Google Volley Kullanımı hakkında bilgi verip gelen JSON veriyi parse etme işlemini anlatacağım.

Arkadaşlar Volley basitce anlatmak gerekirse sunucu ile bağlantı kurup data alışverişi yapmaya yarayan bir yapıdır.Geleneksel olarak kullandığımız Asynctask ile yapılan Http Request işlemini çok kolaylaştıran,karmaşık kodlar içermeyen,arka plan işlerini kendi halleden,kendi cachle’me sistemi olan ve Android’in kullanılmasını önerdiği HTTP Request sistemdir.

Daha detaylı bilgiyi için tıklayınız.

Dersin daha iyi anlaşılması için örnek bir uygulama yazdım. İndirip incelerseniz çok daha iyi anlayacağınızı düşünüyorum.Kod üzerinde açıklama yapmaya çalıştım.

[wpdm_file id=35]

Burda dikkat etmemiz bir kaç husus var öncelikle onları belirteyim.
-Öncelikle internet izni vermeyi unutmayalım.

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

-Sonrasında ise volley.jar’ı projemize dahil etmeyi unutmuyoruz. Volley.jar dosyasını indirdiğiniz kaynak kod içersinde Android private Libraries altında bulabilirsiniz. Sizde aynı şekil sürükle bırakma yöntemi ile jar dosyasını projenize dahil edebilirsiniz.

-Aynı şekil indireceğiniz kaynak kod içerisinde bulunan AppController.java dosyasınıda projenizde oluşturmayı ve Manifest dosyasında application tagı altında tanımlamayı unutmayın.Bunu nasıl yaptığımızı manifest dosyasında görebilirsiniz.

Kodlama kısmına geçelim.

AndroidManifest.xml

////////
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mobilhanem.jsonparser"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    <application
        android:name="com.mobilhanem.jsonparser.app.AppController"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.mobilhanem.jsonparser.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET" />

</manifest>

Burada application altındaki kısmı eklemeyi unutmayalım.

android:name="com.mobilhanem.jsonparser.app.AppController"

Uygulamamızda AppContoller.java yıda oluşturalım.

AppContoller.java

package com.mobilhanem.jsonparser.app;

import android.app.Application;
import android.text.TextUtils;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

public class AppController extends Application {

    public static final String TAG = AppController.class.getSimpleName();

    private RequestQueue mRequestQueue;
    private static AppController mInstance;

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
    }

    public static synchronized AppController getInstance() {
        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            mRequestQueue = Volley.newRequestQueue(getApplicationContext());
        }

        return mRequestQueue;
    }

    // TODO adding request to queue
    // Request'i volley'in Q sırasına atıyoruz
    public <T> void addToRequestQueue(Request<T> req, String tag) {
        req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
        getRequestQueue().add(req);
    }

    // TODO adding request to queue
    // Request'i volley'in Q sırasına atıyoruz
    public <T> void addToRequestQueue(Request<T> req) {
        req.setTag(TAG);
        getRequestQueue().add(req);
    }

    // TODO cancel request from queue
    // Request'i volley'in Q sırasından çıkarıyoruz
    public void cancelPendingRequests(Object tag) {
        if (mRequestQueue != null) {
            mRequestQueue.cancelAll(tag);
        }
    }

}

Yukarıdaki kodda herhangi bir değişiklik yapmadan direk kullanabilirsiniz.

MainActivity.java

///////

import java.util.HashMap;
import java.util.Map;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Spinner;
import android.widget.TextView;

import com.android.volley.Request.Method;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.mobilhanem.jsonparser.app.AppController;

public class MainActivity extends Activity {
    Spinner sp;
    int secilen;
    TextView t1, t2, t3, t4;
    ProgressDialog pDialog;
    String veri_string;

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

        // activity_main.xml de oluşturduğumuz textview leri koda tanıtıyoruz.
        t1 = (TextView) findViewById(R.id.textView2);
        t2 = (TextView) findViewById(R.id.textView4);
        t3 = (TextView) findViewById(R.id.textView6);
        t4 = (TextView) findViewById(R.id.textView8);
        
        // activity_main.xml de oluşturduğumuz spineri koda tanıtıyoruz.
        sp = (Spinner) findViewById(R.id.spinner1);

        // Spinera Listener ekliyoruz
        sp.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                secilen = arg2; // spinerdan secilen değerin sonra değerini
                                // alıyoruz. kaçıncı sırada olduqunu
                if (secilen != 0) { // seçilen deger ilk deger değilse yani Kişi
                                    // seçiniz yazısı değilse
                    pDialog = new ProgressDialog(MainActivity.this);
                    pDialog.setMessage("Kişi Bilgileri Getiriliyor...");
                    pDialog.setIndeterminate(true);
                    pDialog.setCancelable(false); // ProgressDialog u iptal
                                                    // edilemez
                                                    // hale getirdik.
                    pDialog.show();
                    getData();

                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
            }
        });
    }

    public void getData() {
//TODO adding request to POST method and URL
        //Burada issteğimizi oluşturuyoruz, method parametresi olarak post seçiyoruz ve url'imizi const'dan alıyoruz.
        
        StringRequest myReq = new StringRequest(Method.POST, Const.url,
                new Listener<String>() {

                    @Override
                    public void onResponse(String response) {
                        // // TODO datalarımız geldi parse işlemi yapılmalı
                        // // TODO lets parse it
        

                        JSONObject veri_json;
                        try {
                            veri_json = new JSONObject(response);// gelen
                                                                    // veri_string
                                                                    // değerini
                                                                    // json
                                                                    // arraye
                                                                    // çeviriyoruz.
                            // try içinde yapmak zorunlu çünkü çıkabilecek bir
                            // sorunda uygulamanın patlamaması için

                            String isim, yas, mail, adres;
                            try {
                                // try içinde yapmak zorunlu çünkü çıkabilecek
                                // bir sorunda uygulamanın patlamaması için.
                                // veri_json arrayindeki değerleri alıyoruz.
                                isim = veri_json.getString("isim");
                                yas = veri_json.getString("yas");
                                mail = veri_json.getString("mail");
                                adres = veri_json.getString("adres");

                                // bu aldığımız değerleri textView lere
                                // yazdırıyoruz.
                                t1.setText(isim);
                                t2.setText(yas);
                                t3.setText(mail);
                                t4.setText(adres);

                            } catch (JSONException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        } catch (JSONException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        pDialog.dismiss(); // ProgresDialog u kapatıyoruz.
                    }
                }, new ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // TODO there is an error to connecting server or getting data
                        // Server'a bağlanırken yada veri çekilirken hata oldu
                        System.out.println(error.getMessage());
                    }
                }) {
            // TODO let put params to volley request
            // Burada göndereceğimiz request parametrelerini(birden fazla olabilir) set'liyoruz
            
            protected Map<String, String> getParams()
                    throws com.android.volley.AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                //TODO seçilen kişinin id'sini kisi parametresine ekliyoruz
                params.put("kisi", secilen + "");
                return params;
            };
        };
        myReq.setShouldCache(false); //cache kapatıyoruz.

        // Request(İstek)'i Volley'in Requst sırasına atıyoruz
        // Adding request to volley request queue
        AppController.getInstance().addToRequestQueue(myReq);
        
    }

}

Gerekli açıklamaları kod üzerinde yapmaya çalıştım.Anlamadığınız ,eklemek istediğiniz yer olursa yorum bırakabilirsiniz.Birdahaki dersime Android’de GSON ile JSON Parse etmeyi anlatacağım.

Sizlerden ricamız facebook.com/mobilhanem sayfamızı beğenmenizdir.Birdahaki dersimize kadar kendinize iyi bakın.

0

Gökhan Musapaşaoğlu

24 Yorum

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?