Geliştiriciler için Java Android kurulumu

Gün geçtikçe gelişen mobil işletim sistemi Android yazılım geliştiricilerin iştahını kabartıyor. Android işletim sistemi üzerinde Java programlama diliyle geliştirilmiş uygulamalar çalıştırılmaktadır. Bundan dolayı uygulama geliştirmek için Java bilmek gerekli. C# ile halledilmez mi ? derseniz monodroid veya xamarin ile küçük bir ücret ödeyerek geliştirebilirsiniz. Konuyu fazla uzatmadan mevzuya geçmek istiyorum.

android-kurulumu

Android işletim sisteminde çalışacak program yazmak için Java Android kurulumu şart. Bu kurulum yeni başlayanlar için adeta işkence gibi geliyor. Konuyu araştıranlar andorid developer kurulum hakkında eskiden anlatılmış kurulum adımları çetrefilli olduğunu görmüştür. Bunu indir sonra onu kaldır updeyt et orda onu çağır 2 gün bekle amuda kalk vs. Eminim bu kurulum yüzünden hevesli yazılımcı arkadaşlar android den vazgeçmişlerdir. Konuyu uzattım biliyorum daha fazla sabrınızı denemeden Java Android kurulumunun basitleştirilmiş halini size paylaşmak istiyorum.

İlk defa kurulum yapacaklar için öncelikle Java ve Java JDK’yı indirip kurmaları gerekir. Java JDK için ; http://www.oracle.com/technetwork/java/javase/downloads/index.html

Google; Eclipse + ADT plugin, Android SDK Tools, Android Platform-tools kurulum için tüm gerekli eklenti ve programları bir araya toplayarak bir paket halinde indirip gerekli güncellemeleri yaparak android geliştirme dünyasına giriş yapabilirsiniz. ADT (Android Developer Tools) paketini aşağıdaki link yardımı ile karşıınıza çıkacak olan siteden indirin. http://developer.android.com/sdk/index.html

İndirdiğiniz (adt-bundle-windows-x86) bu dosyayı belirlediğiniz bir klasöre çıkartın. Resimdeki gibi SDK Manager çalıştırarak gerekli paketleri indirip yükleyin. Tavsiyem bütün paketleri işaretleyip yüklemek.

basit-android-kurulumu

Ardından eclipse klasörüden eclipse programını çalıştırın. Resimdeki gibi sağ üsteki Help menüsünden Install New Software sekmesine gelip android eklentisini Add butuna tıklayıp Name alanına Android , Location alanın da http://dl-ssl.google.com/android/eclipse url sini girip Ok butonuna basın. Resimdeki gibi ekran görüntüsü alacaksınız. Buradan Developer Tools yükleyin.

eclipse-android-yuklemek

Bunları yaptıktan sonra geriye fazla bir şey kalmıyor. Gerekli yolu da tanımladıktan sonra Eclipse File menüsünden Android projesini oluşturabilirsiniz. Daha detaylı anlatım için detaylı videoyu izleyebilirsiniz.

Database bağlı formda arama yapmak

Veritabanına bağlı windows form uygulamasında form içinde database deki verileri arama yaparak listview veya başka bir kontrolde göstermek için yapmamız gereken standart olarak yaptığımız ado.net olayında sqlcommand satırındaki sorguya ek parametre ekleyerek sorguyu gerçekleştirmek.

veritabani-form-arama

Form ekranına resimdeki gibi textbox buton ve gelecek olan verileri gösterebilmek için listview kontrolü sürükleyip yerleştirin. Örnek içinde iki şekilde arama yapabilirsiniz. Biri Google daki gibi arama yaparken harfleri girdikçe çıkacak olan sonuçları anında gösteren(bu büyük veri için aramanızda performans kaybı yaşanacaktır), diğeri ise aratılacak olan kelimeyi girdikten sonra buton ile arama işlemini yaptırmak.

Buton ile aratma yapmak için buton clik olayına yazılacak kod;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SqlConnection sql = new SqlConnection("server=.; database=coder; trusted_connection=true;");

        private void btnAra_Click(object sender, EventArgs e)
        {
            lvListe.Items.Clear();
            SqlCommand doldur = new SqlCommand("select * from tblDeneme where ad like '%" + txtKelime.Text + "%'", sql);
            sql.Open();
            SqlDataReader rdr = doldur.ExecuteReader();
            while (rdr.Read())
            {
                ListViewItem li = new ListViewItem();
                li.Text = rdr["ad"].ToString();
                li.SubItems.Add(rdr["soyad"].ToString());
                lvListe.Items.Add(li);
            }

            sql.Close();
        }

Textbox’un TextChanged olayına yazılacak kod;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 private void txtKelime_TextChanged(object sender, EventArgs e)
        {
            lvListe.Items.Clear();
            SqlCommand doldur = new SqlCommand("select * from tblDeneme where ad like '%" + txtKelime.Text + "%'", sql);
            sql.Open();
            SqlDataReader rdr = doldur.ExecuteReader();
            while (rdr.Read())
            {
                ListViewItem li = new ListViewItem();
                li.Text = rdr["ad"].ToString();
                li.SubItems.Add(rdr["soyad"].ToString());
                lvListe.Items.Add(li);
            }

            sql.Close();
        }

Visual Studio kod arka plan stilleri

Visual Studio kullanan her yazılımcının araması gereken eklentilerden bir tanesi de kod arka plan stilleri. Filmlerde, orada burada gördüğümüz kafayı bozmuş koder, hacker bilumum kod canavarlarının monitörlerini gösterdiklerinde kodların arka planı her zaman siyah veya koyu bir renk stili ile çalışmaktadır. Bunları farklı bir ide, nadir kişilerin kullandığı farklı programlar olarak görmeyin. Belki filmde gördüğünüz yazılımcının kullandığı ide Visual Studio‘nun ta kendisidir. Peki arka planı bu şekilde göstermelerinin ne önemi var ? Cevabı basit; açık renk beyaz, siyah veya kapalı bir renge göre gözleri daha fazla yorar bundan dolayı günün 4/3 ünü kodların başında geçiren insanların gözlerini yormamak için kod arka planı siyah veya koyu renkte olması bu yüzdendir.

kod-renklendirme

Visual Studio kod renklendirme için bulabileceğiniz renk şemalarına bu siteden ulaşabilirsiniz; http://studiostyl.es/

Windows form sql server bağlantısı

C# veya VB.net ile yapılan Windows form uygulamasında oluşturduğunuz veya oluşturulan sql veritabanına(mssql) bağlantı kurup verileri işleyebilmek için ADO.NET teknolojisinden faydalanmaktadır. Ado.net ile windows uygulamasını veya web(asp.net) uygulamasını birbirine bağlayıp veri transferi ve okuması yaptırabiliyorsunuz.

Peki bu bağlantı nasıl yapılıyor soracak olursanız; En basitinden local(kendi bilgisayarınızda) yaptığınız windows form uygulamasını sql server daki oluşturduğunuz veri tabanı ile bağlantı kurabilmek için SqlConnection den faydalanılır.

Kendi bilgisayarımda coder isimli veritabanıma bağlantı için form load veya başka bir yerde yazdığım kod satırı;

1
SqlConnection sql = new SqlConnection("server=.; database=coder; trusted_connection=true;");

Bu şekilde bağlantı yolunu tanımlıyoruz. Bundan sonra yapacağımız işlemler için bu bağlantıdaki örnek uygulamaları inceleyebilirsiniz;

http://coder.digitaldunyam.net/ado-net/

Dropdownlist ve Gridview uygulaması

Asp.net ile geliştirilen web uygulamaların da dropdownlist ve gridview bir arada her zaman ihtiyaç duyularak kullanılmıştır. Bu kontrollerin yer aldığı dropdownlist’in gridview ile bağlantılı bir uygulama yapalım.

dropdownlist-gridview-uygulamasi

Örneğimizdeki senaryo şöyle olsun; üniversitenin kampüslerindeki bölümler ve o bölümlerde derslerin kredilerini görebileceği, veritabanı kısmında okul-bölüm-ders ilişkisinde geçen, kullanıcının dropdownlist de seçeceği okulun tekrar dropdownlist ile seçeceği bölümündeki ders kredilerinigridview de görebileceği mini rapor ekran yapısını uygulayalım.

İlk önce veritabanı tarafında 3 tane tablo oluşturalım. Tablolarımız isim ve sırasıyla tblOkul, tblOkulBolum, tblBolumDers.

Tablo yapısı ve kolon özellikleri

tablo-yapisi

Resimdeki gibi tabloları; değişken tiplerini, isimlerini ve primary key olan id kolanlarının Identity Column özelliğini id olarak atayarak oluşturun.

Oluşturulan tabloları aşağıdaki diyagram resmindeki gibi ilişkilendirin. tblOkul tablsundaki id ile tblOkulBolum tablosundaki okulu kolonu, tblOkulBolum tablsundaki id ile tblBolumDers tablosundaki bolumu kolonu ilişkilendirilmiş. Resim üzerinde de anlaşılması için mavi oklu kolonlar ile kırmızı oklu kolonlar ilişkilendirilmiş.

İlişkilendirilmiş tablolar diyagram ekranı
tablo-iliskilendirmesi

İlişkilendirme de yaptıktan sonra kolonlara veri girişi yapabiliriz. Hayali olarak kampüs ve ilgili bölümlerini aşağıdaki resimdeki gibi doldurdum. Tabloları sırasıyla tblOkul, tblOkulBolum, tblBolumDers şeklinde doldurun.(Tablolardaki id ler otomatik artacağından o kısma isteseniz de veri girişi yapamazsınız.)

Veritabanındaki tablo içeriği
tablo-icerigi-girilmesi
Tablolarımız birbirleri ile ilişkilendirildiği için okulu ve bölümü kolonlarını sadece ilgili tablosundaki numarasını yazıyoruz. (Yeni başlayanlar için önerim, resimdeki ve yazdığım tablo isimleri gibi birebir giriş yaptıklarında kod tarafında da fazla bir şey değiştirmeden hata almadan örneği çalıştırabilir.)

Veritabanı tarafını yaptıktan sonra Asp.net tarafına geçebiliriz. Yeni proje oluşturduktan sonra ilk önce web.config dosyamıza veritabanı bağlantımızı alttaki gibi belirlenen kod blogu aralığına yazalım. Burada kendi veritabanınızı kullanacağınız için, veritabanı ismi ve diğer kısımlara takılmamanızı ümit ediyorum.(Local de kod isimini verdiğim veritabanımı kullanıyorum)

Web.config dosya içerği

webconfig-connectionstring

Tasarım kısmında görseldeki gibi ekran hazırlayalım. Kullandıklarım, 2 adet dropdownlist , 1 buton, 1 gridview. Dropdownlist kontrollerinin AutoPostBack özelliğini true yapmayı unutmayın !

Asp.net tasarım ekranı

aspnet-sayfa-duzeni

Tasarım kısmını da bitirdikten sonra kod kısmına geçebiliriz. İlk önce sayfanın  Page_Load kısmından sayfa ilk açıldığında veritabanındaki okul isimlerinin başlangıçta 1. dropdownlist temize gelmesini istiyoruz. Diğer açıklamaları da kod kısmında bulabilirsiniz.

Eklemeyi unutmayın !

1
2
3
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
string constr = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString; // Bağlantı satırını global tanıplayıp tekrar tekrar yazma ihtiyacı duymuyoruz.
        protected void Page_Load(object sender, EventArgs e)
        {
            // Dropdownlist kontrol isimlerini ddOkul ve ddBolum olarak atadım !  
            // Sayfa açılır açılmaz tblOkul tablomuzdaki okul isimlerini ddOkul(dropdownlist) kontrolümüze veritabanımızdan çekiyoruz.
            if (!IsPostBack)
            {

                SqlConnection sql = new SqlConnection(constr);
                SqlCommand com = new SqlCommand("Select id, okul from tblOkul", sql);

                try
                {
                    sql.Open();
                    SqlDataReader reader = com.ExecuteReader();

                    ddOkul.DataSource = reader;
                    ddOkul.DataValueField = "id";
                    ddOkul.DataTextField = "okul";
                    ddOkul.DataBind();
                    reader.Close();
                }

                catch
                {
                    Response.Write("Bir hata oluştu");
                }

                sql.Close();
            }
        }

        protected void ddOkul_SelectedIndexChanged(object sender, EventArgs e)
        {

            // Seçilen okul karşılığında önceden veritabanımız da kayıtlı bulunan okuldaki bölümler, ddBolum(dropdownlist) kontrolümüz de listelenencek.
                SqlConnection sql = new SqlConnection(constr);
                SqlCommand com = new SqlCommand("Select id, bolum from tblOkulBolum where okulu='" + ddOkul.SelectedItem.Value +"'", sql);

                try
                {
                    sql.Open();

                    SqlDataReader reader = com.ExecuteReader();

                    ddBolum.DataSource = reader;
                    ddBolum.DataValueField = "id";
                    ddBolum.DataTextField = "bolum";
                    ddBolum.DataBind();
                    reader.Close();
                }

                catch
                {
                    Response.Write("Bir hata oluştu");
                }

                sql.Close();

        }

        protected void btnListele_Click(object sender, EventArgs e)
        {

            SqlConnection sql = new SqlConnection(constr);
            SqlCommand com = new SqlCommand("Select  dersler, kredi from tblBolumDersler where bolumu='" + ddBolum.SelectedItem.Value + "'", sql);

            try
            {
                sql.Open();

                SqlDataReader reader = com.ExecuteReader();

                DataTable tablo = new DataTable();
                tablo.Load(reader);
                GridView1.DataSource = tablo.DefaultView;
                GridView1.DataBind();

                reader.Close();
            }

            catch
            {
                Response.Write("Bir hata oluştu");
            }

            sql.Close();
        }

Burada bazı bölümlerin dersleri gridview kontrolünde göstermeyebilir. Sadece Maltepe MYO okulundaki Bilgisayar ve Muhasebe derslerini verirabanımıza kayıt ettiğimiz için örneğimizde sadece 2 bölümün dersleri göstermekte.

Zamanlı bilgisayar işlem programı

Her junior yazılımcının karşılaşacağı ödev babında program ile merhaba. BEnzer konu her ne kadar paylaşılmışsa da alternatif olarak paylaşmak istedim.

otomatik-bilsiyara-kapatma-programi

Aşağıdaki bağlantıdan indirebileceğiniz zamanlı bilgisayar işlem programı ile bilgisayarı belirlediğiniz zaman kapatıp veya yeniden başlatabilirsiniz. Yada resimdeki gibi bir form ekranı tasarlayarak alttaki kodlar yardımı ile yapabilirsiniz.

Form tasarlarken kullandığım kontroller; birkaç label, buton, maskedtextbox(zamanı saat ve dakika formatın da girebilmek için), datetimepicker, radiobuton, timer ve notifyicon. Yaptığım işlemleri kod tarafına geçmeden adım adım anlatırsam konuyu daha verimli aktaracağımı düşünüyorum;

  • Anlık zamanı gösterebilmek için timer kontrolünün tick olayına bir label a anlık saati gösterdik. Timer ın Interval değerini 1000 yaparak saniyede bir anlık saati label da otomatik gösterdik.
  • Zamanlayıcı çalıştırmak için ilgili buton yardımı ile maskedtextbox ve datetimepicker seçilen değeri metod yardımı ile datetime tipli değişkene atadık. Zamanlayıcı çalıştırmak için eklenen timer ı aktif ettik.
  • Aktif edilen zamanlayıcı timer ı her saniyede bir şimdiki zaman(saat) ile ayarlanan saati karşılaştırdık.
  • Ayarlanan zaman ile şimdiki zaman eşit ise radiobuton da seçilen işlemi yapmasını istedik.
  • NotifyIcon kontrolü ile programı yani formu gizlediğimiz de sağ alt köşede mesaj iletisi vermesi için ayarladık.
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
 private void tmrSimdikiZaman_Tick(object sender, EventArgs e)
        {
            lblSimdikiSaat.Text = DateTime.Now.ToLongTimeString();
        }
       
        DateTime alarmZamani;
        DateTime ayarZamani;
        private void btnKur_Click(object sender, EventArgs e)
        {
            if (txtSaat.Text == "")
            {
                MessageBox.Show("Girilen değerleri kontrol et \n Alanlardan herhangi birini boş bırakma !");
                return;
            }
            else
            {

                alarmayar(dateTimePicker1.Value.Date);
            }
        }

        private void alarmayar(DateTime zaman)
        {

            alarmZamani = zaman;
            alarmZamani = alarmZamani.AddHours(Convert.ToInt32(txtSaat.Text.Substring(0, 2)));
            alarmZamani = alarmZamani.AddMinutes(Convert.ToInt32(txtSaat.Text.Substring(3, 2)));


            if (DateTime.Now >= alarmZamani)
            {
                MessageBox.Show("Geçmiş zamana alarm kuramazsınız !!!");
                return;
            }
            else
            {

                tmrAlarmZamani.Enabled = true;
                btnKur.Enabled = false;
                if (rbKapat.Checked == true)
                {
                    lblMesaj.Text = "Bilgisayar " + txtSaat.Text +  " zamanına kapatılması için ayarlandı.";
                }
                else if (rbYeniden.Checked == true)
                {
                     lblMesaj.Text = "Bilgisayar " + txtSaat.Text + " zamanına yeniden başlatılması için ayarlandı.";
                }
                else
                {
                    lblMesaj.Text = txtSaat.Text +  " için herhangi bir görev ayarlanmamış";
                }
            }
        }

        private void tmrAlarmZamani_Tick(object sender, EventArgs e)
        {
            ayarZamani = DateTime.Now;

            if (ayarZamani.ToString() == alarmZamani.ToString())
            {
                tmrAlarmZamani.Enabled = false;

                if (rbKapat.Checked)
                {
                    notifyIcon1.BalloonTipText = "Bilgisayarınız kapatılıyor...";
                    notifyIcon1.ShowBalloonTip(3);
                    System.Diagnostics.Process.Start("shutdown", "-s -f -t 0");
                }
                else if (rbYeniden.Checked)
                {
                    notifyIcon1.BalloonTipText = "Bilgisayarınız yeniden başlatılıyor...";
                    notifyIcon1.ShowBalloonTip(3);
                    System.Diagnostics.Process.Start("shutdown", "-r -f -t 0");
                }
                else
                {
                    lblMesaj.Text = "Zaman Geldi";
                    notifyIcon1.BalloonTipText = "Zaman Geldi";
                    notifyIcon1.ShowBalloonTip(5);
                }

            }
        }

        private void btnIptal_Click(object sender, EventArgs e)
        {
            tmrAlarmZamani.Enabled = false;
            btnKur.Enabled = true;
            rbYeniden.Checked = false;
            rbKapat.Checked = false;
            lblMesaj.Text = "Herhangi bir görevi yok !";
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            if (FormWindowState.Minimized == WindowState)
            {
                Hide();
                notifyIcon1.BalloonTipText = lblMesaj.Text;
                notifyIcon1.ShowBalloonTip(5);
            }
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (tmrAlarmZamani.Enabled == true)
            {
                if (MessageBox.Show("Zamanlandırlmış bir görev olduğu için uygulama kapatılamıyor. \nUygulamayı ve görevi kapatmakta karalımısınız ?", "Uyarı !", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    Application.Exit();
                }
             
            }
        }

       

        private void notifyIcon1_Click(object sender, EventArgs e)
        {
            this.Show();
            WindowState = FormWindowState.Normal;
        }

App.Config nasıl eklenir ve kullanılır

Veritabanı ile haşır neşir projelerimizde veritabanı ile uygulamayı bağlamak için(database adı, kullanıcı adı, şifre vs.) bir veya birkaç yerde Connectionstring kullanırız. Bu gibi durumlarda hem güvenliği arttırmak hemde iş yükünü azaltmak için App.Config kullanımı çok önemlidir.

App.Config kullanımı hakkında fazla söz etmeden nasıl kullanırız görelim. Oluşturduğumuz masaüstü projemize App.Config dosyası yoksa ekliyoruz. Dosya içindeki connectionStrings etiketleri arasına aşağıdaki gibi ilgili yerlere bilgileri yazıyoruz.

1
2
3
4
 <connectionStrings>
    <clear/>
    <add name="constr" connectionString="Data Source=VeritabaniAdresi;Initial Catalog=VeritabaniAdi;Persist Security Info=True;User ID=VeritabaniKullaniciAdi;Password=VeritabaniSifre"/>
  </connectionStrings>

system-configuration-ekleme

Proje içinde herhangi bir formda bağlantıyı kullanabilmek için App.Config’e bağlantı ismi ile aşağıdaki gibi çağırıyoruz. Bunu yapmadan önce System.Configuration referansını eklemeyi unutmayın…

1
2
3
SqlConnection sql = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);

//... bağlantıdan sonra geri kalan işlemler.

Hali hazırda yapılan örneği aşağıdaki bağlantıdan indirebilirsiniz.