folder Tahribat.com Forumları
linefolder Mobil Programlama
linefolder Android'de URL Adresindeki JSON Dosyasını Basit Şekilde Ayrıştırmak



Android'de URL Adresindeki JSON Dosyasını Basit Şekilde Ayrıştırmak

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    Android ile bir web adresinde bulunan JSON dosyasının nasıl ayrıştırılıp kullanılacağını anlatacağız

     
    Uzun bir aradan sonra bloguma yazma fırsatı buldum. Bu aralar Android ile biraz uğraşmaktayım. Haliyle bu uğraşlar sonucu elde ettiğim sonuçları sizlerle paylaşmaya çalışıyorum. Çok fazla hikayeye girmeden sunuma geçeyim. Öncelikle boş bir Android projesi açalım. Projenin içerisine (MainActivity olduğunu varsayıyorum) bir adet TextView koyalım. 
     
    activity_main.xml
    <TextView
    android:id="@+id/tvKisiler"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="TextView" />

    Okuyacağımız JSON dosyasına ait verileri buradaki tvKisiler adlı TextView içerisine yazılacaktır. Yazacağıız yöntemden biraz bahsetmek gerekirse, bir süreç yönetimidir aslında. Proje yüklenirken istediğim bir method arkaplanda asenkron bir şekilde yüklenmeye başlayacaktır aslında. 
    Projenin okuyacağı JSON dosyasının bilgilerini paylaşalım. 
     
    ornek.json
    {
      "kisiler": [
        {
          "kisi_ID": "1",
          "isim": "Serkan",
          "sehir": "Adana"
        },
        {
          "kisi_ID": "2",
          "isim": "Ahmed İhsan",
          "sehir": "Ankara"
        },
        {
          "kisi_ID": "3",
          "isim": "Asmin Nisa",
          "sehir": "Antalya"
        },
        {
          "kisi_ID": "4",
          "isim": "Hakan",
          "sehir": "Kahramanmaraş"
        },
        {
          "kisi_ID": "5",
          "isim": "Yusuf Taha",
          "sehir": "İstanbul"
        }
      ]
    }
    Okuyacağımız JSON dosyasının en üst düğümü kisiler adlı düğümdür. Projeye bu düğümü gösterdiğimiz zaman bize o düğüme ait ne kadar veri(ler) varsa hepsini okuyacaktır. 
     
    MainActivity.java
    package mikrosistem.denemejson;
    
    import android.os.AsyncTask;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.TextView;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.net.URLConnection;
    
    public class MainActivity extends AppCompatActivity {
        TextView tvKisiler;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    new fnJson().execute("https://api.myjson.com/bins/syuyp");
                }
            });
        }
        class fnJson extends AsyncTask {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }
            @Override
            protected String doInBackground(String... params) {
                return fnAdres_Oku(params[0]);
            }
            @Override
            protected void onPostExecute(String strIcerik) {
                try {
                    String strKisiler = "";
                    JSONObject joNesne = new JSONObject(strIcerik);
                    JSONArray jaDizi =  joNesne.getJSONArray("kisiler");
                    for(int i=0;i<jaDizi.length();i++){
                        JSONObject joDeger = jaDizi.getJSONObject(i);
                        String strKisi_ID = joDeger.getString("kisi_ID");
                        String strIsim = joDeger.getString("isim");
                        String strSehir = joDeger.getString("sehir");
                        strKisiler += "ID: " + strKisi_ID + " | İsim: " + strIsim + " | Şehir: " + strSehir + " \n";
                    }
                    tvKisiler=(TextView)findViewById(R.id.tvKisiler);
                    tvKisiler.setText(strKisiler);
                } catch (JSONException e) {
                    e.printStackTrace();
                    Log.e("Hata1", "Bir hata oluştu: " + e.getLocalizedMessage());
                }
            }
        }
        private static String fnAdres_Oku(String strAdres) {
            StringBuilder sb = new StringBuilder();
            try {
                URL urlAdres = new URL(strAdres);
                URLConnection ucBaglanti = urlAdres.openConnection();
                BufferedReader brOkuyucu = new BufferedReader(new InputStreamReader(ucBaglanti.getInputStream()));
                String strSatir;
                while ((strSatir = brOkuyucu.readLine()) != null) {
                    sb.append(strSatir + "\n");
                }
                brOkuyucu.close();
            } catch (Exception e) {
                e.printStackTrace();
                Log.e("Hata2", "Bir hata oluştu: " + e.getLocalizedMessage());
            }
            return sb.toString();
        }
    }
    Son olarak da uygulamanın internete çıkabilmesi için internet izni vermemiz gerekmektedir. 
     
    AndroidManifest.xml
    <uses-permission android:name="android.permission.INTERNET" />
    Örnek
     
     
    Bol Androidli günlere.

    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Gizem
    sLeymN
    sLeymN's avatar
    Kayıt Tarihi: 31/Mart/2008
    Erkek

    jackson2 kütüphanesi kullanılarak, jsonlar otomatik olarak java nesnelerine çevirilebiliyor abi. 

    https://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/


    Cehennemin dibine kadar yolum var daha.. || Nasılsa her yalnız kendine sürgündür Asmera unutma.