Merhaba Arkadaşlar,
mobilhanem.com üzerinden anlattığım ilk dersim. Bu dersimizde Android’de Google Volley Kullanımı hakkında bilgi verip gelen JSON veriyi parse etme işlemini anlatacağım.
Arkadaşlar Volley basitce anlatmak gerekirse sunucu ile bağlantı kurup data alışverişi yapmaya yarayan bir yapıdır.Geleneksel olarak kullandığımız Asynctask ile yapılan Http Request işlemini çok kolaylaştıran,karmaşık kodlar içermeyen,arka plan işlerini kendi halleden,kendi cachle’me sistemi olan ve Android’in kullanılmasını önerdiği HTTP Request sistemdir.
Daha detaylı bilgiyi için tıklayınız.
Dersin daha iyi anlaşılması için örnek bir uygulama yazdım. İndirip incelerseniz çok daha iyi anlayacağınızı düşünüyorum.Kod üzerinde açıklama yapmaya çalıştım.
[wpdm_file id=35]Burda dikkat etmemiz bir kaç husus var öncelikle onları belirteyim.
-Öncelikle internet izni vermeyi unutmayalım.
<uses-permission android:name="android.permission.INTERNET">
-Sonrasında ise volley.jar’ı projemize dahil etmeyi unutmuyoruz. Volley.jar dosyasını indirdiğiniz kaynak kod içersinde Android private Libraries altında bulabilirsiniz. Sizde aynı şekil sürükle bırakma yöntemi ile jar dosyasını projenize dahil edebilirsiniz.
-Aynı şekil indireceğiniz kaynak kod içerisinde bulunan AppController.java dosyasınıda projenizde oluşturmayı ve Manifest dosyasında application tagı altında tanımlamayı unutmayın.Bunu nasıl yaptığımızı manifest dosyasında görebilirsiniz.
Kodlama kısmına geçelim.
AndroidManifest.xml
//////// <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mobilhanem.jsonparser" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:name="com.mobilhanem.jsonparser.app.AppController" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.mobilhanem.jsonparser.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.INTERNET" /> </manifest>
Burada application altındaki kısmı eklemeyi unutmayalım.
android:name="com.mobilhanem.jsonparser.app.AppController"
Uygulamamızda AppContoller.java yıda oluşturalım.
AppContoller.java
package com.mobilhanem.jsonparser.app; import android.app.Application; import android.text.TextUtils; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.toolbox.Volley; public class AppController extends Application { public static final String TAG = AppController.class.getSimpleName(); private RequestQueue mRequestQueue; private static AppController mInstance; @Override public void onCreate() { super.onCreate(); mInstance = this; } public static synchronized AppController getInstance() { return mInstance; } public RequestQueue getRequestQueue() { if (mRequestQueue == null) { mRequestQueue = Volley.newRequestQueue(getApplicationContext()); } return mRequestQueue; } // TODO adding request to queue // Request'i volley'in Q sırasına atıyoruz public <T> void addToRequestQueue(Request<T> req, String tag) { req.setTag(TextUtils.isEmpty(tag) ? TAG : tag); getRequestQueue().add(req); } // TODO adding request to queue // Request'i volley'in Q sırasına atıyoruz public <T> void addToRequestQueue(Request<T> req) { req.setTag(TAG); getRequestQueue().add(req); } // TODO cancel request from queue // Request'i volley'in Q sırasından çıkarıyoruz public void cancelPendingRequests(Object tag) { if (mRequestQueue != null) { mRequestQueue.cancelAll(tag); } } }
Yukarıdaki kodda herhangi bir değişiklik yapmadan direk kullanabilirsiniz.
MainActivity.java
/////// import java.util.HashMap; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.Spinner; import android.widget.TextView; import com.android.volley.Request.Method; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.mobilhanem.jsonparser.app.AppController; public class MainActivity extends Activity { Spinner sp; int secilen; TextView t1, t2, t3, t4; ProgressDialog pDialog; String veri_string; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // activity_main.xml de oluşturduğumuz textview leri koda tanıtıyoruz. t1 = (TextView) findViewById(R.id.textView2); t2 = (TextView) findViewById(R.id.textView4); t3 = (TextView) findViewById(R.id.textView6); t4 = (TextView) findViewById(R.id.textView8); // activity_main.xml de oluşturduğumuz spineri koda tanıtıyoruz. sp = (Spinner) findViewById(R.id.spinner1); // Spinera Listener ekliyoruz sp.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { secilen = arg2; // spinerdan secilen değerin sonra değerini // alıyoruz. kaçıncı sırada olduqunu if (secilen != 0) { // seçilen deger ilk deger değilse yani Kişi // seçiniz yazısı değilse pDialog = new ProgressDialog(MainActivity.this); pDialog.setMessage("Kişi Bilgileri Getiriliyor..."); pDialog.setIndeterminate(true); pDialog.setCancelable(false); // ProgressDialog u iptal // edilemez // hale getirdik. pDialog.show(); getData(); } } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); } public void getData() { //TODO adding request to POST method and URL //Burada issteğimizi oluşturuyoruz, method parametresi olarak post seçiyoruz ve url'imizi const'dan alıyoruz. StringRequest myReq = new StringRequest(Method.POST, Const.url, new Listener<String>() { @Override public void onResponse(String response) { // // TODO datalarımız geldi parse işlemi yapılmalı // // TODO lets parse it JSONObject veri_json; try { veri_json = new JSONObject(response);// gelen // veri_string // değerini // json // arraye // çeviriyoruz. // try içinde yapmak zorunlu çünkü çıkabilecek bir // sorunda uygulamanın patlamaması için String isim, yas, mail, adres; try { // try içinde yapmak zorunlu çünkü çıkabilecek // bir sorunda uygulamanın patlamaması için. // veri_json arrayindeki değerleri alıyoruz. isim = veri_json.getString("isim"); yas = veri_json.getString("yas"); mail = veri_json.getString("mail"); adres = veri_json.getString("adres"); // bu aldığımız değerleri textView lere // yazdırıyoruz. t1.setText(isim); t2.setText(yas); t3.setText(mail); t4.setText(adres); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } pDialog.dismiss(); // ProgresDialog u kapatıyoruz. } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO there is an error to connecting server or getting data // Server'a bağlanırken yada veri çekilirken hata oldu System.out.println(error.getMessage()); } }) { // TODO let put params to volley request // Burada göndereceğimiz request parametrelerini(birden fazla olabilir) set'liyoruz protected Map<String, String> getParams() throws com.android.volley.AuthFailureError { Map<String, String> params = new HashMap<String, String>(); //TODO seçilen kişinin id'sini kisi parametresine ekliyoruz params.put("kisi", secilen + ""); return params; }; }; myReq.setShouldCache(false); //cache kapatıyoruz. // Request(İstek)'i Volley'in Requst sırasına atıyoruz // Adding request to volley request queue AppController.getInstance().addToRequestQueue(myReq); } }
Gerekli açıklamaları kod üzerinde yapmaya çalıştım.Anlamadığınız ,eklemek istediğiniz yer olursa yorum bırakabilirsiniz.Birdahaki dersime Android’de GSON ile JSON Parse etmeyi anlatacağım.
Sizlerden ricamız facebook.com/mobilhanem sayfamızı beğenmenizdir.Birdahaki dersimize kadar kendinize iyi bakın.
0
Merhaba,
Burada php dosyasından çekilen veri nasıl bir veri? O dosyayı da paylaşabilir misiniz acaba?
http://www.mobilhanem.com/android-http-post-ve-json-parse-etme/
Bu dersimde kullandığım PHP dosyasıyla yapısı aynı .Dersi incelerseniz PHP dosyasınıda inceleyebilirsiniz.
Kolay Gelsin..
Merhaba aynı şekilde bende yapıyorum ama TÜRKÇE KARAKTER sorunu yaşıyorum yardımcı olurmusunuz
Türkçe karakter sorununu yaşamanızın sebebi Sunucudan gelen cevap ile alakalı olabilir. Bunu bende yaşamıştım ve şu şekilde aşmıştım.
Php dosyasını kodlarken Utf-8(Bomsuz) olmasına dikkat edelim. Yoksa türkçe karakter olan Json değerleri null yada bozuk dönüyor.Utf-8 bomsuz kodlamayıda notepad++ indirip kodlama menüsünden utf-8 kodlaması (bomsuz) olarak tercih edin
Json dosyasını ASP de yaptım ASP de nasıl duzeltebilirim
http://www.mobilhanem.com/android-http-post-ve-json-parse-etme/
buradaki linkteki php kodunu kopyalayım hosta attım uygulamadan linki değiştirdim ama olmuyor
siz
Bizden çektiğin zaman veri geliyor mu?
kusura bakmayın yazmayı unuttum hosttan kaynaklanan bir sorun başka bir hostta calıştı
Sorunun çözülmesine sevindim.
Kolay gelsin.
Merhaba, paylaşım için çok teşekkürler. Bu uygulama .net ile yazılmış asmx uzantılı web servisleri çağıramıyor mu? denediğimde hata alıyorum.
StringRequest myReq = new StringRequest(Method.POST, Const.url,
new Listener()
Burada Const tanımsız olarak geliyor. Post url’yi nereden ayarlıyoruz göremedim de
Uygulamanın tamamını indirdiğinde Const.java dosyası bulunmaktadır.
Kod için sağol hocam 🙂 Güzel paylaşım Emeğinize Sağlık 😀
Teşekkür ederiz:)
Hocam php dosyası yayından mı kaldırıldı acaba? Kod çalışırken hata mesajı veriyor –
public void onErrorResponse
Php dosyası duruyor. Aldığın hata nedir?
hocam kusura bakma ama kodu bodoslama kopyalayıp yapışturınca hiçbirşey anlaşılmıyor şunu adım adım anlatsanız çok mu zor yinede allah razı olsun emeğinize sağlık
Dediğin şekilde anlatım yapsaydık suan sitede bulunan derslerin 5’te 1 kadar ders bulunurdu. Anlamadığın yeri sorabilirsin. Kolay gelsin.
[…] oluşmuş olan token’ı servisimize gönderme işlemlerini yapmalısınız. Bunu Asynctask , volley kütüphanesi veya Retrofit kütüphanelerini ile yapabilirsiniz. Bu yapıyı nasıl kuracağınıza siz karar […]
Hocam sizin yaptığınız kodların aynısını yaptım. Kişi bilgileri getiriliyor diyor öylece kalıyor.
verileri çekeceği sunucuya bağlanamıyor olabilir. belli bir süre bekledikten sonra zaman aşımına uğruyormu hiç bekledin mi? muhtemelen getData() methodu içerisinde bir satırda takılıyor… Sebebini daha iyi anlamak için getData() methodu içinde bir satıra breakPoint koyarak debug edebilirsin.
Osman dersi güncelledim. Hem android studio’ya geçirdim hemde linki değştirdim. Site önceden http://mobilhanem.com ‘du . Ssl kurunca linkleri ssl ‘li yani https://mobilhanem.com şeklinde çağırmak gerekiyor.
Kolay gelsin.
sunucu verileri nasıl alıyorsunuz asp.net ile gerçekleştirdiniz mi?Birde Web servis ile androidden image upload etmeye çalışıyorumda urlde haliyle image datası uzun olduğu için gerçekleştiremedim.Siz ne önerirsiniz?
[…] kullanımı ile ilgili sitemizde bulunan bu dersi de ayrıca […]