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


Sonuç



Kaynak: Android'de URL adresindeki JSON Dosyasını Basit Şekilde Ayrıştırmak

Bol Androidli günlere :)