İlk Android uygulamam

Etiketlenen : , , , , ,

Android konusunda sadece kullanıcı değil de biraz da geliştiren tarafında yer almanın vakti geldi geçiyor. Uzun zamandır planladığım ama vakit bulamadığım ilk Android uygulama deneyimimle ilgili bloguma birşeyler yazmazsam olmaz. :) Ben elimdeki kaynaklar ve kolay bir uygulama olması için Döviz Kurları adıyla (her ne kadar Android Market’in sayısı bir elin parmaklarını geçmeyen Türkçe uygulamaları içinde bir kaç alternatif döviz uygulaması olsa da) bir uygulama geliştirmeye karar verdim. Bana ait olan http://www.doviz.gen.tr sitesine JSON olarak veri üreten bir dosya yaparak işe başladım. Amacım o JSON dosyasını çağırıp elde edeceğim verileri uygulamamda uygun kısımlara yazdırmaktı. Android ile ilgili herhangi bir kod yazmadığım gibi hiçbir java deneyimi olmayan benim bir kaç saatte yaptıklarımı http://www.doviz.gen.tr/doviz_android_1.0.4.rar adresinden indirebilirsiniz.

Uygulamayı Eclipse üzerinde hazırlıyorum. Vakit buldukça burada Eclipse, Android SDK, uygulamayı Android Market için hazır etmeyi açıklayan makalelerim olacak. Java konusunda bilgi sahibi arkadaşların Android platformuyla ilgili çaba göstermesi dileğiyle.

1.0.5 sürüm çalışmalarım:


package com.ersinkoc.doviz;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import android.webkit.WebSettings;
import android.webkit.WebView;

public class DovizKurlari extends Activity {
WebView webview;

	/*
	 *
	 * Version kontrolü için json istek adresinin sonuna ?version=1.0.3 ekledim
	 *
	 */
	public static final String DOVIZURL = "http://www.doviz.gen.tr/doviz_json.asp?version=1.0.5";

	@Override
	public void onCreate(Bundle icicle) {
	    super.onCreate(icicle);

	    // layout getirme
	    setContentView(R.layout.main);

	    // girer girmez veri güncellemesi
	    veriGuncelle();

	    // Güncelle butonuna tıklandığını dinletiyorum
	    final Button guncelTut = (Button) findViewById(R.id.guncelle);
	    guncelTut.setOnClickListener(new View.OnClickListener() {
	    public void onClick(View v) {
	            veriGuncelle();
	    }
	    });

	    // Çıkış butonuna tıklandığını dinletiyorum
	    final Button cikisYap = (Button) findViewById(R.id.cikis);
	    cikisYap.setOnClickListener(new View.OnClickListener() {
	    public void onClick(View v) {
	        DovizKurlari.this.finish();
	    }
	    });

	    // Site butonuna tıklandığını dinletiyorum
	    final Button siteGosterme = (Button) findViewById(R.id.siteGoster);
	    siteGosterme.setOnClickListener(new View.OnClickListener() {
	    public void onClick(View v) {
	        siteGoster();
	    }
	    });

	}

	// menü oluştur
	public boolean onCreateOptionsMenu(Menu menu){
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.menu, menu);
		return true;
	}

	// menüde basılan seçeneklere göre işlemler
	public boolean onOptionsItemSelected (MenuItem item){
		switch (item.getItemId()){
		case R.id.geriDon:
		    setContentView(R.layout.main);
		    veriGuncelle();
			return true;

		case R.id.menuCikis:
			DovizKurlari.this.finish();
			return true;
		}
		return false;
	}

	// mobile site olayı (site yok henüz)
	public void siteGoster(){
	    webview = new WebView(this);
	    setContentView(webview);
	    WebSettings settings = webview.getSettings();
	    settings.setJavaScriptEnabled(true);
	    webview.loadUrl("http://www.doviz.gen.tr/?mobile=1");

	}

	public void veriGuncelle(){

		// layout üzerinde işlem yapacağım bileşenleri tanımlama
	    EditText dolarText = (EditText) findViewById(R.id.dolarKuru);
	    EditText euroText = (EditText) findViewById(R.id.euroKuru);
	    EditText dolar2Text = (EditText) findViewById(R.id.dolarKuru2);
	    EditText euro2Text = (EditText) findViewById(R.id.euroKuru2);
	    TextView guncellemeZamani = (TextView) findViewById(R.id.sonGuncelleme);
	    TextView sonKayitText = (TextView) findViewById(R.id.sonKayit);

	    // güncelleme anında her bölüme ... koydurmaca
	    dolarText.setText("...");
	    euroText.setText("...");
	    dolar2Text.setText("...");
	    euro2Text.setText("...");
	    sonKayitText.setText("...");

	    // Bir web isteği oluşturma
	     HttpClient webIstemci = new DefaultHttpClient();
	     HttpGet webGetir = new HttpGet(DOVIZURL);
	     HttpResponse gelenCevap;
	        try {
	        	gelenCevap = webIstemci.execute(webGetir);
	            HttpEntity birim  = gelenCevap.getEntity();
	            if (birim != null) {
	                InputStream gelenVeri = birim.getContent();
	                String sonuc = convertStreamToString(gelenVeri);

	                JSONObject jsonVeri=new JSONObject(sonuc);

	                /*
	                 * Eski sürüme örnek veri:
	                 * {"dolar":"1.4970","euro":"1.9290","dolar2":"1.4980","euro2":"1.9300","ddolar":"1.5000","deuro":"1.9290","ddolar2":"1.5010","deuro2":"1.9300","sonkayit":"Kur G\u00FCncelli\u011Fi : 4 Eyl\u00FCl 2010 Cumartesi , 11:30","guncelleme":"04.09.2010 12:20:58 itibariyle g\u00FCncellendi! Kulland\u0131\u011F\u0131n\u0131z yaz\u0131l\u0131m\u0131n daha g\u00FCncel s\u00FCr\u00FCm\u00FC bulunmu\u015Ftur. Yeni s\u00FCr\u00FCm numaras\u0131 1.0.3"}
	                 *
	                 * Düzgün sürümle alınan veri:
	                 * {"dolar":"1.4970","euro":"1.9290","dolar2":"1.4980","euro2":"1.9300","ddolar":"1.5000","deuro":"1.9290","ddolar2":"1.5010","deuro2":"1.9300","sonkayit":"Kur G\u00FCncelli\u011Fi : 4 Eyl\u00FCl 2010 Cumartesi , 11:30","guncelleme":"04.09.2010 12:21:21 itibariyle g\u00FCncellendi!"}
	                 *
	                 */

	                // json verimizden isim isim veri toplamaca
	                String dolar = jsonVeri.getString("dolar");
	                String euro = jsonVeri.getString("euro");
	                String dolar2 = jsonVeri.getString("dolar2");
	                String euro2 = jsonVeri.getString("euro2");
	                String sonGuncellemeVakti = jsonVeri.getString("guncelleme");
	                String sonKayitTarihi = jsonVeri.getString("sonkayit");

	                // ekranda gerekli yerlere veriyi koymaca
	                dolarText.setText(dolar.toString());
	                euroText.setText(euro.toString());
	                dolar2Text.setText(dolar2.toString());
	                euro2Text.setText(euro2.toString());
	                sonKayitText.setText(sonKayitTarihi.toString());
	                guncellemeZamani.setText(sonGuncellemeVakti.toString());

	                gelenVeri.close();
	            }
	        }catch(Exception e){
	                // internet bağlantısı veya gelen veride hata olursa diye ekrana uyarı koydum
	                guncellemeZamani.setText("Güncelleme başarısız!\nInternet bağlantınızı kontrol edip, tekrar deneyiniz!");
	                Logger.getLogger(DovizKurlari.class.getName()).log(Level.SEVERE, null, e);
	        }

	}

	public String convertStreamToString(InputStream is) {
		// gelen veriyi string yapıya çevirmece
	    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
	    StringBuilder sb = new StringBuilder();
	    String line = null;
	    try {
	      while ((line = reader.readLine()) != null) {
	          sb.append(line).append("\n");
	      }
	    } catch (IOException e) {
	    } finally {
	      try {
	          is.close();
	      } catch (IOException e) {
	      }
	    }
	    return sb.toString();
	}

}

Uygulamayı şu an Android Market üzerinde “Döviz Kurları” yazarak bulabilir veya http://www.doviz.gen.tr/DovizKurlari.apk adresinden indirebilirsiniz.

Android Hakkında En Büyük Türkçe Kaynak bizimhost internet hizmetleri interaktif proje tek parola burçlar vijital