Eyl
04İlk Android uygulamam
Etiketlenen : android, android market, döviz, eclipse, java, uygulama
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.









Hocam elinize sağlık. :)
Eline sağlık. Android SDK üzerine artık daha fazla yazı, makale ve kod bekliyoruz :)
Elinize sağlık güzel bir çalışma olmuş. strings.xml içeriğinizden de bahsederseniz daha da güzel olabilir. Yeni çalışmaları bekliyoruz. ;)
Guzel bir calisma olmus, tesekkurler.
Bende R.java dosyasinin icinde id adli class olusmuyor:
package com.ersinkoc.doviz;
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}
Bu yuzden de hata aliyorum.
Nedeni hakkinda bir fikriniz var mi?
Tesekkurler
Öncellikle elinize bilginize sağlık hocam. bende android de yazılım geliştirmeye başladım. bir web servis örneği yaptım ufak bişey emulator de cevap alıyorum ama programı telefonuma yükledigim zaman connection refused problemi ile karşılaşıyorum. android cihazımdan servisi yayınladığım bilgisayara ping atabiliyorum erişimim sağlam yani ama sorunu bir türlü çözemedim yardımcı olursanız sevinirim.
Benim sorum şu yönde örneğin geliştirimiş olduğunuz bu uygulamayı tüm android işletim sistemine sahip telefonlara aktarabiliyormusunuz?Ya da bunun bir yolu var mı?
merhabalar, öncelikle sağlıklı hayırlı günler diliyorum..Size bir sorum olacak..android işlmecili bir pad tablet almayı düşünüyorum.bunda exe. uzantılı filemaker database programını çalıştırabilmem veya yükleyebilmem mümkünmü, bunu nasıl gerçekleştirebilirim ,,yardımcı olursanız sevinirim..iyi çalışmalar
text dosyasına okuma-yazma yapan bir android uygulama sunabilirmisiniz ?
hiç java bilmeden bu kadar kodu nasıl yazdınız merak ediyorum
Hiç beni tanımadan bu soruyu sorabildiğine göre cevabı biliyorsundur…