Android: Volley
Android programlamada web servisler önemli bir noktadır. Kullanıcıdan aldığımız datalar ve de göstereceğimiz datalar uygulama içerisinde olmak zorunda değildir. Bizde bu dataları web servisler yardımı ile gönderir veya alırız. Bu yazıda ise bu işlemlerimizi kolaylaştıran bir kütüphane ile beraberiz. Android tarafında işimizi kolaylaştıran gerçekten güzel kütüphaneler mevcut. Bugün göreceğimiz Volley ise gerçekten sevdiğim bir kütüphanedir kendisi. 😃
Peki bu Volley ne yapıyor bizim için?
Şahsen Android’de sevmediğim kısım bir yere request atma kısmıydı ve gerçekten de eziyet gibi geliyordu ta ki Volleyi görene dek. 😃 İsmi pek heybetli gözükmese de bizim için yaptıkları çok önemli. Google tarafından geliştirilen bu kütüphane Asyntask ile yapılan HTTP Request ve Response işlemini bizim için kolaylaştırmış.
Bu kısa bilgiden sonra örnek uygulamamıza geçebilirz.
Projemizi oluşturduktan sonra ilk olarak internete çıkmak için izin almamız gerekiyor. AndroidManifest.xml dosyamıza aşağıdaki izni yazıyoruz.
1 2 3 4 5 |
<uses-permission android:name="android.permission.INTERNET"></uses-permission> |
İkinci build.gradle içine dependencies ekliyoruz ve kodumuza geçiyoruz.
1 2 3 4 5 |
compile 'com.mcxiaoke.volley:library:1.0.+' |
Web servis olarak hava durumunu veren openweather kullanılabilir fakat bugün biz farklı bir api kullanacağız. https://www.apixu.com bu adresten api key alarak uygulamaya başlıyoruz.
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 |
public class MainActivity extends AppCompatActivity { private final String requestLink = "https://api.apixu.com/v1/current.json?key=039e4db4333a482dabf214535170904&q=Istanbul"; private TextView textView1; private TextView textView2; private TextView textView3; private TextView textView4; private ImageView icon; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); defineComponent(); RequestQueue requestQueue = Volley.newRequestQueue(this); StringRequest stringRequest = new StringRequest(Request.Method.GET, requestLink, new Response.Listener<String>() { @Override public void onResponse(String response) { parseResponse(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { System.out.println("Error: " + error); } }); requestQueue.add(stringRequest); } private void defineComponent(){ textView1 = (TextView) findViewById(R.id.txt1); textView2 = (TextView) findViewById(R.id.txt2); textView3 = (TextView) findViewById(R.id.txt3); textView4 = (TextView) findViewById(R.id.txt4); icon = (ImageView) findViewById(R.id.icon); } private void parseResponse(String response){ try { JSONObject jsonObject = new JSONObject(response); JSONObject jsonCurrent = jsonObject.getJSONObject("current"); JSONObject jsonLocation = jsonObject.getJSONObject("location"); JSONObject jsonCondition = jsonCurrent.getJSONObject("condition"); textView1.setText(jsonLocation.getString("region") + "-" +jsonLocation.getString("country")); textView2.setText("Durum: " + jsonCondition.getString("text")); textView3.setText("sıcaklık: " + jsonCurrent.getString("temp_c")); textView4.setText("hissedilen sıcaklık: " + jsonCurrent.getString("feelslike_c")); String weatherIcon = jsonCondition.getString("icon"); System.out.println(weatherIcon); Picasso.with(this).load("https:" + weatherIcon).into(icon); } catch (JSONException e) { e.printStackTrace(); } } } |
Volley ile bir RequestQueue oluşturuyoruz ve StringRequest classından ise oluşturduğumuz nesneyi bu requestQueue ekliyoruz. StringRequest hangi metod ile istek yapılacağını, istek atıcağımız linki, bu istekten dönecek olan cevap için bir Response.Listener ve de işler ters gittiğinde yakalayacak olan Response.ErrorListener parametre olarak alıyor. Gerisi String olarak gelen json objesini parse etmek.
Projeye https://github.com/cemdrman/androidVolley adresinden ulaşabilirsiniz.