Merhaba arkadaşlar,
Bugün sizlere Android studio ile Json verilerini nasıl parse edip kullanırız anlatmaya çalışacağım.
Gson kütüphanesi, Json verilerilerini parse etmemize yarıyor. Android studioda, gördüğüm kadarıyla genel olarak bu kullanıyor gibi.
Bu kütüphaneyi .Net’teki yardımcı kütüphaneler gibi düşünebilirsiniz.
Mesela orada Newtonsoft.Json var burada bu var gibi.
Gson kullanımı
Bu kütüphane sadece String(Json datası) data’yı alıyor ve Modele set ediyor.
Yani bizlerin ilk önce bir Json Datasına ihtiyacımız olacak.
Bundan dolayı ben bu yazıda Android Studio’da Json datasını nasıl çağırırız(HttpRequest) işlemlerinide anlatmış olacağım.
Aşağıda ki uygulama ile test edelim.
Öncelikle AndroidManifest.xml dosyamıza internet erişimi için izin ekleyelim.
Manifest dosyası tam hali;
Şimdi Gson kütüphanesini projemize dahil edelim;
Bunun için build.grandle dosyasını açıyoruz
dependencies içine compile ‘com.google.code.gson:gson:2.8.2’ yazıyoruz.
Yukarıda Sync Now linki çıkacak ona tıklayıp ekliyoruz.
Güncel Gson kütüphanesini eklemek için buradan sürümüne bakabilirsiniz : https://github.com/google/gson
Ben bu örnekte, burada ki json verisini kullanacağım.
Bu veri sonucunda olması gereken modelim şu şekilde;
Burada model classını hızlıca otomatik olarak oluşturmak için bu online aracı önerebilirim, tek tek yazmakla uğraşmaktan kurtarıyor bizi : http://www.jsonschema2pojo.org/
PostModel.java
package com.example.semih.gsontestapp; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class PostsModel { @SerializedName("userId") @Expose private Integer userId; @SerializedName("id") @Expose private Integer id; @SerializedName("title") @Expose private String title; @SerializedName("body") @Expose private String body; public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } }
Modelimizi hazırladık ve internet erişim iznini ayarladık.
Artık Api’ye istekte bulunup Gson ile parse edebiliriz.
MainActivity.java dosyam; önemli kodların açıklamalarını en altta yapıyorum.
package com.example.semih.gsontestapp; import android.os.Bundle; import android.os.StrictMode; import android.support.v7.app.AppCompatActivity; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Type; import java.net.HttpURLConnection; import java.net.URL; import java.util.List; public class MainActivity extends AppCompatActivity { String url = "https://jsonplaceholder.typicode.com/posts"; String jsonData = ""; @Override protected void onCreate(Bundle savedInstanceState) { // + internet erişimi için; StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); //- super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { // + Json verisi çekiliyor. jsonData = GetJsonData(url); // - // + Gelen veri liste şeklinde olacağı için // Modelimizin Liste tipinde olacağını belirtiyoruz. Type postModelListType = new TypeToken>(){}.getType(); // - // + Gson ile Json verisi okunur ve Listeye alınır. Gson gson = new Gson(); List
postsModelList = gson.fromJson(jsonData, postModelListType); // - for(int i=0; i try bloğu içerisinde;
public String GetJsonData(String _url) throws IOException methodu ile web sitesine istekte bulunup dönen json sonucunu String olarak dönüyoruz.
// + Json verisi çekiliyor. jsonData = GetJsonData(url); // -Daha sonra Gson ile parse ediyoruz.
ListpostsModelList = gson.fromJson(jsonData, postModelListType); .Net'te postModelListType kısmında;
List() diyerek direkt atama yapabiliyoruz ancak Java'da bunu tek satırda yapmamıza izin vermiyor.
Öncelikle liste için kullancağımız modeli bir Type belirtmemizi istiyor.
Bundan dolayı;Type postModelListType = new TypeToken>(){}.getType();
ile Type oluşturuyoruz.
Daha sonra jsonData içinde ki verileri gson.fromJson(jsonData, postModelListType); kodu ile ayrıştırıp Generic Listemize(List< PostsModel >) atıyoruz.
// + Gelen veri liste şeklinde olacağı için // Modelimizin Liste tipinde olacağını belirtiyoruz. Type postModelListType = new TypeToken>(){}.getType(); // - // + Gson ile Json verisi okunur ve Listeye alınır. Gson gson = new Gson(); List
postsModelList = gson.fromJson(jsonData, postModelListType); // - Evet arkadaşlar işlemlerimiz bu kadar. Console ekranı ekran çıktısı;
Yararlı olabilecek kaynaklar;
Gson Tutorial — Getting Started with Java-JSON Serialization & Deserialization