Android Studio 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 |
<?xml version="1.0" encoding="utf-8"?> <android.widget.RelativeLayout 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.jsonkullanimi.MainActivity"> <EditText android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="102dp" android:ems="10" android:inputType="textPersonName" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editText" android:layout_centerHorizontal="true" android:layout_marginTop="38dp" android:onClick="getData" android:text="Getir" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/button" android:layout_centerHorizontal="true" android:layout_marginTop="70dp" android:text="TRY:" android:textColor="@android:color/black" android:textSize="30sp" /> </android.widget.RelativeLayout> |
İzin kısmını ve tasarım kısmını hallettikten sonra geriye MainActivity.java sınıfımızı düzenlemek kalıyor.
MainActivity.java
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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
package com.example.esatgozcu.jsonkullanimi; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import org.json.JSONObject; import org.w3c.dom.Text; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class MainActivity extends AppCompatActivity { EditText editText; Button button; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText)findViewById(R.id.editText); button = (Button)findViewById(R.id.button); textView = (TextView)findViewById(R.id.textView); } // Getir butonuna tıklayınca.. public void getData(View view){ // Oluşturduğumuz DownloadData sınıfından bir nesne oluşturuyoruz. DownloadData downloadData = new DownloadData(); try { // Kullanıcının verisini link ile birleştiriyoruz. String url = "http://api.fixer.io/latest?base="; String chosenBase = editText.getText().toString(); downloadData.execute(url+chosenBase); } catch (Exception e) { e.printStackTrace(); } } private class DownloadData extends AsyncTask<String, Void, String> { // Arka planda gerçekleşecek işlemler.. @Override protected String doInBackground(String... params) { String result = ""; URL url; 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 = new URL(params[0]); // Url ile bağlantı kuruyoruz. httpURLConnection = (HttpURLConnection) url.openConnection(); // Url'deki verileri çekebilmek için InputStream oluşturuyoruz. InputStream inputStream = httpURLConnection.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); int data = inputStreamReader.read(); while (data > 0) { char character = (char) data; result += character; // Karakteri bir ileriye taşıyoruz. data = inputStreamReader.read(); } return result; } catch (Exception e) { e.printStackTrace(); return null; } } // Arka plandaki işlemler bittikten sonra buraya geliyoruz. @Override protected void onPostExecute(String s) { super.onPostExecute(s); try { // Elde ettiğimiz data'yı json formatına dönüştürüyoruz. JSONObject jsonObject = new JSONObject(s); String rates = jsonObject.getString("rates"); JSONObject jsonObject1 = new JSONObject(rates); String tl = jsonObject1.getString("TRY"); textView.setText("TRY: "+tl); } catch (Exception e) { 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.