Android uygulamamızı php script yardımıyla mysql veritabanından veri çekeceğiz. Bu verileri parse edip kullanmaya çalışacağız.

Php scripti veri tabanına bağlanıp tüm verileri çekecek ve ekrana tüm içeriği json dizisi şeklinde yazacak. Android uygulamamız ise bu sayfaya http protokolünü kullanarak yada url için stream oluşturarak bağlantı gerçekleştirecek ve sayfanın içeriğini okuyacak. Böylelikle sayfadaki tüm veriyi alabileceğiz. Ardındanda kullanıcının istediği seçeneğe göre verileri listeleyeceğiz.

Android uygulamamız içerisinde http bağlantı gerçekleştirip sayfa talebinde bulunmalıyız. Bunu anroid service ile yapacağız. Oluşturacağımız service ‘service’ sınıfından türetilecek. ‘activity’ ve ‘service’ arasında bir IPC oluşturarak service sınıfındaki methodları kendi methoduymuş gibi rahatlıkla kullanacağız.

Service bize gerekli tüm veriyi temin edecek. I/O işlemi olduğu için uygulama yavaş başlayacak bunu da bir progressdialog ile aşacağız.

Uygulamanın üst bölümünde yer alan bir ‘ViewFlipper’ tvlerdeki altyazı türüne benzeyen bir kayan yazı ile sayfanın başlığını bize gösterecek. Titreşime benzeyen bir animasyonu ‘TableLayout’ üzerinde kullanarak verilerin hazırlandığı kullanıcıya açık bir şeklide gösterilecektir.

Uygulamada; mysql veri tabanını dolaylıda olsada kullanabilmek ve animasyonlarla kullanıcıyı tatmin etmeye yönelik çalışılmışdır.

Uygulamamızın içeriğine geçelim…

Yapacaklarımızı yukarıda bahsetmişdik. Şimdi de sırasıyla bunları uygulayalım. İlk olarak php scriptini hazırlayalım.

<?php
mysql_connect(“localhost”,”***”,”***”);
mysql_select_db(“DB_STACK”);

<pre class="brush: actionscript3; gutter: true; first-line: 1; highlight: []; html-script: false">$q = mysql_query(“SELECT * FROM TBL_METEOROLOJI”);

while($e = mysql_fetch_assoc($q))
$output[] = $e;

print(json_encode($output));

mysql_close();
?>

Şeklinde bir script ile veriler veri tabanından alınıyor ve json tipinde sayfaya yazdırılıyor.

Veri tabanımızda dokuz tane kolonumuz var bunu için bir sınıf ve interface tasarlıyoruz. ‘interface’ değişkenleri ve get/set fonksiyonlarını içeren bir sınıfa sahip. ‘Sınıf’ ise interface ile genişletiliyor ve de tüm bu veriyi depolayabilecek bir veri yapısına sahip.(hashmap) Veri tabanında primary key olan bölüm hashmap için ise key değeri olarak kullanılacakdır. Methoda alınan bir ‘JSONObject’ parse edilerek hashmap içeriği dolduruluyor.

Bu verileri ağ üzerinden alarak activity e iletecek olan service bakalım.

InputStream is = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(“http://10.0.2.2/mysqlData”);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();

Sayfa isteğinde bulunuluyor ve sayfa verileri elde ediliyor. ’10.0.2.2′  adresi emülatör ağa köprü üzerinden bağlandığından ana bilgisayarın localhost adresi konumunda olmaktadır. Ana bilgisayarda localhost/mysqlData şeklinde çağırabileceğimiz bir sayfayı emülatör içerisinde  10.0.2.2/mysqlData şeklinde çağırabiliyoruz. Bu nedenle somut bir cihaz üzerinde bu ayarlar ile uygulama çalışmayacaktır. Ana sistem adresi configure edilmelidir.

İkinci bir seçenek ise;

DataInputStream streamreader = new DataInputStream
(new URL(url).openStream());
StringBuilder streambuilder = new StringBuilder();
while(streamreader.available()>0){
streambuilder.append((char)streamreader.readByte());
}

Bu şekilde bir I/O(web sayfası okuma isteği -url.openStream-) işlemi işinizi rahatlıkla görecekdir. ‘JSONArray’ kullanarak verilerden JSON dizisi oluşturuyoruz. Dizinin elemanları birer JSONObject’tir.

JSONArray jArray = new JSONArray(<string>);

Verimiz hazırsa artık ‘Main Activity’ e geçelim.

Activity service kullarak verileri temin edecek, ekrandaki animasyonları yönetecek ve kullanıcı isteğine göre verileri listeleyecek. Service ise verileri uygulama ilk açıldığında temin edip depolayacak.

Bunun için öncelikli olarak progress dialoğumuzu oluşturmalıyız.

MyProgressDialog = new ProgressDialog(Connecter.this);
MyProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
MyProgressDialog.setMessage(“Loading Data Please Wait…”);

Progress dialog yukarıdaki şekilde oluşturuluyor. Style ksımında STYLE_HORIZONTAL’ i de deneyebilirsiniz. (Bilgisayarda default olarak kullanılan progress bar gibidir.) Progress dialoğu kontrol edebilmek için bir thread ve bir de handler gerekiyor. Handler bilgiyi güncellerken thread ise işlemi yapar.

Uygulamada JSONArray child thread yardımıyla parse edilir. Handler ise durum güncelleştirmesi yapar ve işlem sonlandığında dialoğun yok olmasını gerçekleştirir. Bir bakıma handler threadin sonlanma kriterine göre threadin çalışmasını izler ve gerekli kriter oluştuğunda thread sonlandırılır.

Verilerin tamamı parse edildiğine göre şimdide animasyonlara göz atalım.

Şekilde de görüldüğü gibi girilen aya ilişkin meteorolojik veriler ekrana geliyor. Veriler için bir ‘tablelayout’ oluşturulup dinamik olarak dolduruluyor. Sayfanın en üsttünde ise bir ‘ViewFlipper’ bulunmaktadır. ViewFlipper’ ın içerisinde ise yazının görünmesini sağlayan TextView yer alır. TextView için ise iki türlü animation oluşturulmuşdur, bunlar flipperin-flipperout değerleri içindir. ViewFlipper çoklu yazılar için güzel bir tercihdir. Animasyon desteği ile de ön planda olan bir components dır. Büyük boyutlarda static yazılar için tercih edilebilir.

Uygulamada da bariz olarak görünen, ağ üzerinden bağlanacağımız bir veri tabanı ile rahatlıkla çalışabaileceğimizdir.

İyi çalışmalar…

Uygulamanın videosu…

Uygulamanın kaynak kodları…

Yazı Etiketleri :

Yazı Kategorileri:

Manşet, Programlama
SÜRMANŞET
sola kaydır
sağa kaydır
BAŞ YAZI
Google Özgün içerik ayrımını nasıl yapıyor?
Google Özgün içerik ayrımını nasıl yapıyor?
NoSQL ile alakalı makaleler okurken, Google indexleme, arama, inceleme süreçleri hakkında çeşitli dökümanlar okudum. Kodrella’da yazmayı düşündüğüm bir konuyla uyuşunca Google’un bu...

Yükleniyor...