Custom Array Adapter Nasıl Yazılır? – 3

Bu örneğimizde JSON verisi elde ederek deprem takip örneği yapacağız.

USGS Nedir?

USGS (İngilizce: United States Geological Survey) Amerikalı Yerbilimsel Araştırma Kurumu sunduğu API ile, dünya çapındaki deprem, volkan hareketliliği gibi farklı verilere başka uygulamalar tarafından erişilebilmesine izin vermektedir.

Örneğin Deprem verileri için verilen API dokümantasyonundaki işlevlerden sorgulama(query) özelliğini uygulamamızda kullanalım. API dökümantasyonunda birçok tipte sorgulamanın nasıl yapılacağı açıklanmaktadır.

Aşağıda bunlara iki örnek verilmiştir. İlki 02 Temmuz 2018 ile 02 Ocak 2019 arasındaki deprem verilerini JSON formatında sunmakta, ikincisi aynı tarihlerde şiddeti minimum 6.4 olan deprem verilerini XML formatında sunmaktadır.

Birinci Bağlantı : https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2018-07-02&endtime=2019-01-02

İkinci Bağlantı : https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2018-07-02&endtime=2019-01-02&minmagnitude=6.4

İkinci linkteki bağlantıya tıklayarak yaptığımız sorgu sonucunda, USGS sunucusunun verdiği json cevabı (json response), tarayıcımızda aşağıdaki gibi görünecektir.

json cevabının bir kısmı

Bu cevabı kopyalayıp uygulamamızda çift tırnak arasına yapıştırarak, jsonCevabi isimli bir String olarak kaydedebiliriz. (İlerideki örneklerde bu bağlantıyı indireceğiz).

jsonCevabi String’i

Bu ham veri bize çok fazla bir anlam ifade etmediği için editörler ile yapıyı görüntüleyip, daha anlamlı bir yapı haline getirip işimizi kolaylaştırabiliriz.

JSON Editor Online sitesine giderek JSON cevabını yapıştırarak yapıyı görüntüleyebiliriz.

json editor

Bu yapıda features JSON dizisinin her bir elemanı bir depremi temsil etmektedir. Depremi temsil eden bu JSON objesinin ise type anahtarı ile String değeri, geometry anahtarı ile JSON objesi gibi veriler içermektedir.

Bizim ilgilendiğimiz deprem özellikleri properties anahtarı ile JSON objesi içinde saklıdır.


Uygulamaya geri dönelim. Tek bir aktivitemiz vardır. Bu aktivitemize ilişkin XML dosyamıza id vererek bir ListView ekleyip, Java’da id’si deklare edelim.

XML Dosyası :

Java Dosyası :

ListView’i deklare ettikten sonra ihtiyacımız olan üç unsuru hatırlarsak;

  1. Verinin saklanması için bir ArrayList
  2. Satırımız (görsel kalıbımız) için bir xml dosyası
  3. ArrayList’deki verinin ListView’deki bir satıra nasıl yerleştirileceğini belirten bir adaptördür.

Ancak ilk aşamadaki ArrayList içindeki saklayacağımız veri formatı kendi tanımlayacağımız bir sınıfa ait nesneler olacaktır. Bu sınıfa Deprem diyelim. Bu sınıfın üç değişkeni olacaktır. Bunların veri tipini tanımlarken, veriyi alacağımız JSON formatını incelemeliyiz.

Yapıya incelediğimizde features anahtarı ile verilen JSON dizisinin her bir elemanı bir depremi temsil etmekteydi. Bu dizinin birer JSON objesi olan elemanları da properties anahtarı ile verilen bir JSON objesi içermektedir.

Biz bu uygulamada ; şiddet değerini mag anahtarı, konum değerini place anahtarı, tarih değerini ise date anahtarı ile properties anahtarı ile verilen bir JSON objesi içindedir.

Bu üç değer bize String, String ve long formatında sunulmaktadır. Burada time anahtarı ile verilen long tipindeki tarih değeri Unix zaman formatıdır. Bu long değeri daha sonra gün-ay-yıl-saat-dk. gibi istediğimiz bir formata ileride dönüştüreceğiz.

Deprem sınıfımızı tanımlarken bize verilen bu veri tiplerini kullanacağız. Buna göre Deprem sınıfını aşağıdaki gibi tanımlayabiliriz.

ArrayList’imize Deprem nesnelerini ekleyeceğiz. Ancak bu kez bu nesneleri oluştururken Deprem yapılandırıcının ihtiyaç duyacağı konum, şiddet, tarih değerlerini jsonCevabi’nden ayıklayacağız.


Artık ikinci unsurumuz olan satırımız (görsel kalıbımız) için bir xml dosyası oluşturabiliriz. Daha önce belirttiğimiz gibi bu eşit genişlikte oluşan üç TextView’den oluşacak.


Üçüncü unsur olan özel (custom) adaptörü tanımlayalım.

Üç içeriği, üç TextView’e yazıyoruz. Burada farklı olan kısım long olan tarih değişkenimizi bir Date nesnesine dönüştürmektir.

Böylelikle bir long sayı yerine Gün Ay Yıl Saat formatında yazabiliriz.


Son olarak Adaptorum nesnesi oluşturup ListView’e atayabiliriz.

MainActivity Son Hali :

Uygulamanın Son Hali :

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir