Android ile Json Parsing

Android ile Json Parsing

Merhabalar, Geçmiş yazılarda php ile web servisoluşturmuştuk, web servisimiz bize json formatında veri döndürüyordu. Şimdi bu json verilerini android uygulamamızda kullanacağız.

Web servis oluşturduğumuz  yazıya buradan ulaşabilirsiniz.

Json verilerimiz şu şekilde:

{
  "elemanlar":
  [
    {"id":"2","ad":"Mehmet","soyad":"xxxxxx","yas":"22","adres":"Mersin","telefon":"053xxxxxxxx"},
    {"id":"3","ad":"Esra","soyad":"xxxxxx","yas":"20","adres":"Erdemli","telefon":"0538xxxxxxxx"},
    {"id":"4","ad":"Ali","soyad":"xxxxxxx","yas":"21","adres":"Sinop","telefon":"0534204xxxx"},
    {"id":"5","ad":"Hakan","soyad":"xxxxxxxx","yas":"27","adres":"Bingol","telefon":"0534xxxxxxx"}
  ]

}

En başta bir tane elemanlar adında json node’umuz var.  node’umuzun içerisinde  json object’lerimiz var. Android uygulamamızda bu verileriparse edeceğiz.

Bir tane android uygulaması oluşturuyoruz. Uygulamamıza internet iznini vermek zorundayız, manifest dosyamız :


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.thecodeprogram.androidjsonparsing" >

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".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>

</manifest>
 

activity_main dosyamızda bir tane listview olacak, o listviewi kendimize göre biçimlendirip dolduracağız. activity_main.xml dosyamız:


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>
 

Listviewi biçimlendirmek için ozel_ListView.xml dosyamız olacak. Bu dosyayı kendimiz layout klasörüne ekliyoruz. Layot dosyasına sağ tık yapıp New -> XML -> Layout XML File diyerek bir xml dosyayı ekliyoruz. Bu dosya ile listviewi istediğiniz şekilde biçimlendirebilirsiniz. Dosyamızın içeriği şu şekilde :

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <!-- ad -->
    <TextView
        android:id="@+id/ad"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#538"
        android:textSize="15dp"
        android:textStyle="bold" />

    <!-- Soyad -->
    <TextView
        android:id="@+id/soyad"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#333"
        android:textSize="15dp"
        android:textStyle="bold" />

    <!--yas-->
    <TextView
        android:id="@+id/yas"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#831"
        android:textSize="15dp"
        android:textStyle="bold" />

    <!--adres-->
    <TextView
        android:id="@+id/adres"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#254"
        android:textSize="15dp"
        android:textStyle="bold" />

    <!--telefon-->
    <TextView
        android:id="@+id/telefon"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#874"
        android:textSize="15dp"
        android:textStyle="bold" />

</LinearLayout>
 

İstek gönderip geriye değer alacağımız bir sınıfımız olmalı. Sınıfımızın adıServiceHandler.java , bu sınıf ile web servise bir istek yollayıp geriyeresponse bir değer alacağız. Bu sınıfı her projede kullanabilirsiniz.Sınıfımız :

 

package com.thecodeprogram.androidjsonparsing;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

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.apache.http.util.EntityUtils;

public class ServiceHandler {

    static String response = null;
    public final static int GET = 1;
    public final static int POST = 2;

    public ServiceHandler() {

    }

    public String makeServiceCall(String url, int method) {
        return this.makeServiceCall(url, method, null);
    }


    public String makeServiceCall(String url, int method,
                                  List<NameValuePair> params) {
        try {
            // http istek yolluyoruz
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpEntity httpEntity = null;
            HttpResponse httpResponse = null;

            // isteğin post mu yoksa get mi olduğuna bakıyoruz
            if (method == POST) {
                HttpPost httpPost = new HttpPost(url);
                // adding post params
                if (params != null) {
                    httpPost.setEntity(new UrlEncodedFormEntity(params));
                }

                httpResponse = httpClient.execute(httpPost);

            } else if (method == GET) {
                // appending params to url
                if (params != null) {
                    String paramString = URLEncodedUtils
                            .format(params, "utf-8");
                    url += "?" + paramString;
                }
                HttpGet httpGet = new HttpGet(url);

                httpResponse = httpClient.execute(httpGet);

            }
            httpEntity = httpResponse.getEntity();
            response = EntityUtils.toString(httpEntity);

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

        return response;

    }
}
 

Şimdi sıra asıl işi yaptığımız MainActivity.java sınıfımızı yazmaya geldi.  MainActivity sınıfı ListActivity sınıfından türeyecek.  Uygulamamız açılırken arka planda verileri çekeceğiz.

MainActivity.java Sınıfı:

package com.thecodeprogram.androidjsonparsing;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;


public class MainActivity extends ListActivity {

    private ProgressDialog pDialog;

    //Url adresimiz. Benim adresim böyle sizlerinki farklı olabilir.
    private static String url = "http://10.0.3.2/android_mysql_connection/listele.php";


    JSONArray contacts = null;
    ArrayList<HashMap<String, String>> elemanListesi;


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

        elemanListesi = new ArrayList<HashMap<String, String>>();

        ListView listview = getListView();

        new verileriCek().execute();
    }


    private class verileriCek extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Yükleniyor...");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            ServiceHandler sh = new ServiceHandler();

            String jsonStr = sh.makeServiceCall(url, ServiceHandler.POST);


            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    contacts = jsonObj.getJSONArray("elemanlar");

                    for (int i = 0; i < contacts.length(); i++) {

                        JSONObject c = contacts.getJSONObject(i);

                        String id = c.getString("id");

                        String ad = c.getString("ad");

                        String soyad = c.getString("soyad");

                        String yas = c.getString("yas");

                        String adres = c.getString("adres");

                        String telefon = c.getString("telefon");


                        HashMap<String, String> contact = new HashMap<String, String>();

                        contact.put("id", id);
                        contact.put("ad", ad);
                        contact.put("soyad", soyad);
                        contact.put("yas", yas);
                        contact.put("adres", adres);
                        contact.put("telefon", telefon);

                        elemanListesi.add(contact);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Url Boş");
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            if (pDialog.isShowing())
                pDialog.dismiss();

            ListAdapter adapter = new SimpleAdapter(
                    MainActivity.this,
                    elemanListesi,
                    R.layout.ozel_ListView,
                    new String[] {"ad","soyad","yas","adres","telefon"},
                    new int[] {R.id.ad,R.id.soyad,R.id.yas, R.id.adres,R.id.telefon});

            setListAdapter(adapter);
        }

    }

}
 

Android uygulamamızda  json verilerini parse etmeyi öğrendik, takıldığınız yerler için iletişime geçebilirsiniz.

Sağlıcakla…

Burak Hamdi TUFAN


Tags


Share this Post

Send with Whatsapp

Post a Comment

Success! Your comment sent to post. It will be showed after confirmation.
Error! There was an error sending your comment. Check your inputs!

Comments

  • There is no comment. Be the owner of first comment...