Kotlin ile JSON Kullanımı

Json bir veri formatıdır ve web sitelerinden veri çekmek istediğimiz zaman eğer sitelerin api desteği varsa çok kolay ve güncel bir şekilde verileri çekebiliriz. Json ile ilgili ayrıtılı bilgiyi internet üzerinden bulabilirsiniz biz bu makalede basit bir uygulama ile web sitesinden nasıl veri çekebileceğimize bakacağız. Uygulamamız döviz çevirici olacak ve verileri bu siteden çekeceğiz.
Örnek olarak USD bazında bilgileri kullanmak istiyorsak linkimiz https://api.fixer.io/latest?base=USD bu şekilde olması gerekiyor Türk lirası bilgileri için de https://api.fixer.io/latest?base=TRY şeklinde olması gerekiyor sadece son üç harfi değiştiriyoruz.
Anlatıma geçmeden önce AndroidManifest.xml dosyamıza aşağıdaki izini ekleyelim.
1 |
<uses-permission android:name="android.permission.INTERNET"/> |
Tasarım kısmı olan activity_main.xml dosyasını aşağıdaki gibi düzenliyoruz.
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.esatgozcu.kotlinjson.MainActivity"> <EditText android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="57dp" android:ems="10" android:inputType="textPersonName" app:layout_constraintBottom_toTopOf="@+id/button" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="51dp" android:onClick="button" android:text="GETİR" app:layout_constraintBottom_toTopOf="@+id/textView" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.731" /> </android.support.constraint.ConstraintLayout> |
İzin kısmını ve tasarım kısmını hallettikten sonra geriye MainActivity.kt sınıfımızı düzenlemek kalıyor.
MainActivity.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
package com.example.esatgozcu.kotlinjson import android.os.AsyncTask import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import kotlinx.android.synthetic.main.activity_main.* import org.json.JSONObject import java.io.InputStreamReader import java.net.HttpURLConnection import java.net.URL class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } // Getir butonuna tıklayınca.. fun button(view: View) { val downloadData= Download() try{ // Veriyi çekeceğimiz url. val url ="http://api.fixer.io/latest?base=" // Kullanıcının sonuna gireceği değer. val chosenBase = editText.text.toString() // Kullanıcının verisini link ile birleştiriyoruz. downloadData.execute(url+chosenBase) }catch (e : Exception) { e.printStackTrace() } } inner class Download : AsyncTask<String,Void,String>(){ // Arka planda gerçekleşecek işlemler.. override fun doInBackground(vararg params: String?): String { var result = "" val url: URL val httpURLConnection: HttpURLConnection try { // Kullanıcının editText'te veri girmesi ile elde ettiğimiz url'deki bütün // verileri karakter karakter çekiyoruz url = URL(params[0]) // Url ile bağlantı kuruyoruz. httpURLConnection = url.openConnection() as HttpURLConnection // Url'deki verileri çekebilmek için InputStream oluşturuyoruz. val inputStream = httpURLConnection.inputStream val inputStreamReader = InputStreamReader(inputStream) var data = inputStreamReader.read() while (data > 0) { val character = data.toChar() result += character // Karakteri bir ileriye taşıyoruz. data = inputStreamReader.read() } return result } catch (e: Exception) { e.printStackTrace() return result } } // Arka plandaki işlemler bittikten sonra buraya geliyoruz. override fun onPostExecute(result: String?) { super.onPostExecute(result) try { // Elde ettiğimiz data'yı json formatına dönüştürüyoruz. val jsonObject = JSONObject(result) val rates = jsonObject.getString("rates") val jsonObject2 = JSONObject(rates) // Json formatına dönüştürdükten sonra verimizi çekiyoruz. val TL = jsonObject2.getString("TRY") textView.setText("TRY : $TL") } catch (e :Exception) { e.printStackTrace() } } } } |
Böylelikle basit bir şekilde Json verisini nasıl elde edip nasıl işleyebileceğimizi görmüş olduk sizde artık uygulamalarınızda Json formatına sahip veriler ile ilgili işlemleri yapabilirsiniz.
Projenin kaynak kodunu buraya tıklayarak indirebilirsiniz.