Android GSON Kullanarak Json Parse Etme

Merhaba Arkadaşlar,

Bu dersimizde GSON kullanarak json parse etmeyi anlatacağım.Bu dersimiz bir önceki dersimin devamı niteliğinde olacaktır. O dersimizde ne yapmıştık kısaca anlatmam gerekirse Spinner’dan seçilen kişi ismine göre Volley kütüphanesi kullanarak Http Request gerçekleştirmiştik ve kişi bilgilerini sunucudan çekmiştik.Gelen json veriyi klasik json parse etme yöntemiyle parse edip uygulama içinde göstermiştik.

Bugünkü dersimizde ise gelen veriyi klasik yöntemlerle değil onun yerine bizim yerimize parse işlemlerini gerçekleştiren ve gelen verilerden istediğimiz şekilde obje oluşturarak işimizi kolaylaştıran GSON ile json parse etmeyi anlatacağım.

Arkadaşlar baştada dediğim gibi bu dersim diğer dersin devamı şeklinde olacak .O dersimde örnek kod paylaşmıştım . Aynı örneği bu sefer Gson parse ile değiştirip paylaşacağım.Kod üzerinde gerekli açıklamaları yapmaya çalıştım.Volley kullamını daha iyi anlamak için diğer dersimi incelemenizi ve sonrasında burdaki kaynak kodu indirip incelemenizi tavsiye ederim.

Not: Uygulamamızın libs kısmına gson.jar’ı eklememiz lazım.  gson.jar’ı kaynak kod içinde bulabilirsiniz.

MainActivity.java

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

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.google.gson.Gson;
import com.mobilhanem.jsonparser.app.AppController;
import com.mobilhanem.jsonparser.models.PersonClass;

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) {//OnItemSelectedListener implement methodu
            }
        });
    }

    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

                        //TODO Gson objesi yaratıyoruz
                        //TODO Create Gson Object
                        Gson gson = new Gson();//gson objesi oluşturduk
                        //TODO yarattığımız Gson objesini Modelimize yani PersonClass'a çeviriyoruz,
                        //Böylece gelen verilere rahatça ulaşabileceğiz.
                        //TODO Create Model Object with PersonClass
                        PersonClass gsonResponse = gson.fromJson(response,
                                PersonClass.class); //PersonClass'mızdan obje oluşturuyoruz böylelikle set ettiğimiz verilere ulaşacağız.

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

                        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);

    }

}

PersonClass.java

package com.mobilhanem.jsonparser.models;

public class PersonClass {
    //Gelen datalarımızın isimleri ve türleri:
    //Değişken isimleri json veri isimleri ile aynı olması gerekmektedir
    public String isim;
    public String yas;
    public String mail;
    public String adres;
    //Eğer String yerine int yazsaydık yada yas yerine age yazsaydık proje çalışmayacaktı.
    //Ve Crash Olacaktı.
    
    //Yukarıdaki verilere getter metodlarını yazıpta ulaşabilirdik.
}

Evet arkadaşlar bu dersimde anlatmak istediklerim bu kadar. Birdahaki dersimde Volley Kullanarak İmage download etmeyi anlatmayı düşünüyorum.Bu dersimi daha iyi anlamak için kaynak kodu indirmenizi öneririm.

Arkadaşlar sizlerden ricamız facebook.com/mobilhanem sayfamızı beğenmenizdir. Soru,görüş ve önerilerinizi yorum bırakabilirsiniz.Birdahaki dersimize kadar kendinize iyi bakın.

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

0

Gökhan Musapaşaoğlu

3 Yorum

  • Merhaba programı birebir uyguladım. Tüm classlar ve kütüphaneler eksiksiz ve hata da yok ama ekran geliyor hiçbir veri gelmiyor spinnera bastıgımda da hiçbir işlem yapmıyor içi boş. Programın mantıgı nasıl olacak hiçbir veri olmamasının sebebi ne olabilir yardımcı olur musunuz

  • firebase veri tabanındaki json dosyasına da bu şekilde ulaşabilirmiyiz nasıl yapabiliriz bilgi verirseniz çok sevinirim. Birde bu uygulamadaki json dosyası nerede bulamadık o dosyada yerleşim nasıl ona bakmak istiyorum

Haftalık Bülten

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