JSON Kullanımı (Android İçin..)

Önceki makalelerde ana hatlarıyla incelediğimiz ve kullanımı hakkında bilgi verdiğimiz JSON verilerini bu kez Android Platformunda kullanarak konunun daha pekişmesine yardımcı olacağım.

Android Platformu ile ilgili kısa bir bilgi vermek gerekirse;
Google Inc. tarafından geliştirilen bu platform artık hayatımızın hemen hemen her alanında karşımıza çıkacak kadar geniş bir kullanım alanına sahiptir. Bu platformda uygulama geliştirebilmek için farklı programlama dilleri kullanılabilir. Fakat Google, Android Platformunu geliştirirken Java Programlama dilini temel aldığı ve desteklediği için günümüzde Android Geliştiricilerin çok büyük bir çoğunluğu da Java Programa Dilini kullanmaktadır.

Bende bu büyük çoğunluğa dahil olduğum için; konuları ele alırken Java Kategorisinde temel bilgiler verip, Android Kategorisinde konuları pekiştirmek amaçlı anlatımlar gerçekleştireceğim.

JSON konusuna gelecek olursak (ve nihayet konuya geldim.. 🙂 )
Önceki makalemde (JSON Kullanımı (Java için..)) bir JSON nasıl oluşturulur; nasıl veri eklenir,silinir ve güncellenir bunlardan bahsetmiştim. Bu makalemde bunun devamı gibi olacak.

Bu Makalemde basit bir Soru-Cevap uygulaması tasarlayacağım.

tasarim

Resimde de görüldüğü gibi Uygulamamızın Ilk Sayfası Button ve TextView’lerden oluşmaktadır.
– Ilk 4 buton cevap seçenekleri olup tıkladığımız cevap doğru ise sıradaki soruya geçecek, yanlış ise uyarı verecek.
– 5. buton mevcut soruyu silmemi sağlayacak.
– 6. buton ise yeni soru ekleme işlemini gerçekleştirecek. Eklenen sorular ise “Sorular.json” dosyası içine kaydedilerek saklanmış olacak.

MainActivity.java

Ilk olarak nesnel tanımlamalarımızı şu şekilde yapıyoruz.

Burada JSONArray; veritabanımızda JSON Dizisi şeklinde saklanan soruları kullanacağımız nesnedir.
JSONObject ise ekranda çıkacak her soru için değer değiştirecektir. Burada sorusirasi değişkeni başlangıçta 0 değerini alıyor. Bu değer aslında JSONArray içindeki soruların index numarası olarak kullanılacak. Yani uygulama açıldığında sorusirasi değeri 0 olduğuna göre;

veritabani.get(0); metodu bize dizinin ilk elemanını, yani ilk soruyu verdiğine göre biz bunu:
veritabani.get(sorusirasi); şeklinde kullanıp ilk soru nesnemizi çekebilir ve bunu soruNesnesi adlı JSON Nesnemize atayabiliriz.
Yani;
soruNesnesi = veritabani.getJSONObject(sorusirasi);

burada veritabani.getJSONObject(sorusirasi); metodu (JSONObject) veritabani.get(sorusirasi); ile aynı işlevi görmektedir.

Burada ki IzinKontrolu(); metudu Android 6.0 sürümünde Manifest’teki izni kullanıcıya doğrulatmak için oluşturduğumuz bir metoddur. Bu kısım konumuz dışında olduğu için bu metodu hazır olarak vereceğim.

Bu metodda önce veritabani.isNull(sorusirasi) kullanılarak verilen index‘te bir eleman olup olmadığı kontrol ediliyor. Eğer verilen index‘te bir eleman yoksa sonucu true olarak veriyor.
Yani; eğer bizim veritabani dizimiz 2 elemandan oluşuyorsa:
veritabani.isNull(0) ve veritabani.isNull(1) sonucu false
veritabani.isNull(2) değeri ise true dönecektir. Aynı şekilde veritabani.isNull(3) , veritabani.isNull(4) … değerleri de true olacaktır.

kod bloğunda sorusirasi değişkeni değerinde (index‘inde) bir dizi elemanı olup olmadığı sorgulanıyor. Eğer bu değerde bir dizi elemanı mevcut değilse bir uyarı penceresi (AlertDialog) açılıyor..

kod bloğunda ise eğer sorusirasi index‘inde bir dizi elemanı mevcut ise:
soruNesnesi ‘ne yeni dizi elemanının atamasını yapıyor.

soru, cevapA, cevapB, cevapC, cevapD isimli TextView nesnelerinin yazıları değiştiriliyor ve sorusirasi değeri 1 artırılıyor. Böylece bir sonraki soruGoster() metodu tetiklendiğinde sıradaki soru gösterilmiş olur.

 

burada ki cevapla() metodu girilen sorunun doğru cevap olup olmadığını kontrol ediyor.

gösterilen soruNesnesi içerisindeki “Cevap” anahtarına karşılık gelen değer, Parametre olarak girilen cevap değişkenine eşit ise “Tebrikler! Bildin..” şeklinde bir Toast mesajı yayınlanır ve soruGoster() metodu tetiklenerek ekranda sıradaki sorunun gösterilmesi sağlanır.

Burada ise “Yeni Soru Ekle” butonuna basıldığında yapılacak işlemler şu şekilde belirlenmiştir :
veritabani nesnesindeki bilgiler SoruEkle sayfasına gönderilir ve SoruEkle sayfası açılır. veritabani bilgileri SoruEkle sayfasına yollanıp eklenen soru bu bilgilere dahil edilir ve “Sorular.json” dosyası bu şekilde güncellenir.
SoruEkle sayfası açıldıktan sonra MainActivity sayfası sonlandırılır.

MainActivity sayfasının sonlandırılması, soru ekleme işlemi her bittiğinde soruların en baştan başlamasına neden olacaktır. Sorulara kaldığımız yerden devam etmenin farklı yöntemleri var fakat konuyu fazla dağıtmamak uygulamada böyle birşey kullanmayacağım.

burada sorusirasi–; komutunun 2 kez kullanıldığını görüyorsunuz. burada ki ilk komutun sebebi şudur:
soruGoster() metoduna bakacak olursak soruyu gösterdikten sonra (sıradaki soruyu gösterebilmek için) sorusirasi değişkeninin değerinin 1 artırıldığını göreceksiniz. Yani soru silme işlemi sırasında sorusirasi değişkeninin değeri olması gerekenden 1 fazladır. bunu olması gereken değere çekmek için ilk komutu kullanıyoruz.
veritabani.remove(sorusirasi); metodunu kullanarak gösterilen soruyu siliyoruz.
File, FileOutputStream ve OutputStreamWriter sınıflarını kullanarak “Sorular.json” dosyamızı yeniden yazdırıyoruz.
ve ikinci sorusirasi–; komutunu kullanarak sorunun bir tanesini sildikten sonra değişkenin değerini 1 eksiltiyoruz.
Son olarakta soruGoster(); metodu kullanarak sildiğimiz sorunun öncesindeki soruyu ekranda gösteriyoruz.

MainActivity içerisinde bulunan bir diğer metod ise VeritabaniYukle() ama konunun dağılmaması açısından bu metoduda sizlere hazır olarak vereceğim.


 

Ikinci Sayfamızda ise sadece “Sorular.json” dosyasına soru ekleme işlemi yapılacak.

Soru Ekle

Resimde görüldüğü gibi Soru Ekleme Sayfası Button, EditText, RadioGroup ve RadioButton’lardan oluşuyor.

SoruEkle.java

Burada anlattıklarımdan farklı olarak getIntent().getSerializableExtra(“veritabani”).toString()  kodunu görmektesiniz. Bu kod önceki sayfada “Yeni Soru Ekle” butonunda gönderdiğimiz veritabanı bilgilerini almak için kullanılır. Burada gönderdiğimiz/aldığımız bilgiler veritabani JSON Dizisinin String veri tipine dönüştürülmüş halidir.

veritabani = new JSONArray(JSON Stringi); kodu sayesinde de parametre olarak girdiğimiz String bilgileri yeni bir JSONArray dizisi olarak veritabani‘na atanmaktadır.

bu kısımda vazgec butonuna tıkladığımızda MainActivity‘nin açılması ve SoruEkle‘nin sonlandırılması sağlanır.

 

yukarıdaki if bloğunda EditText‘lerin boş olup olmadığı kontrol edilmektedir. Yani EditText‘lerin tümü doldurulmuşsa 2. if bloğuna geçilir,

ve burada da Doğru cevabın işaretlenip işaretlenmediği kontrol edilir.  Buradaki cevapKontrolu() metodu şu şekildedir.

bu metod RadioButton‘ların hangisinin işaretli oluğunu denetler. Eğer biri işaretli değilse ona göre bir değer döndürür. (Örneğin A işaretliyse değer olarak “A” Stringi döndürür.)  Fakat hiç biri işaretli değilse boş bir String değeri ( “” ) döndürür.

Uygulamamızı bölüm bölüm açıklamaya  çalıştım.

Uygulamanın Çalışması için Manifest.xml’de almamız gereken izinler :

Kodların tamamı için (IzinKontrolu ve diğer metodlar linkteki kodlarda mevcuttur):
https://github.com/umon/SoruCevap-Android




You may also like...

1 Response

  1. Anonim dedi ki:

    Böyle bir uygulamada soruları firebaseye kaydetmemiz mümkün mi eğer mümkünse bir tutorial hazırlayablirmisiniz?

Bir Cevap Yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.