Genel

Android Studio Rehber Uygulaması

Bu yazımızda SQLite veritabanını kullanarak bir rehber uygulaması yapımını anlatacağım. Çok basit bir uygulama olucak. Telefon ve isim soyisim alacağız. Kontrollerini atmadım. Örneğin Aradığımız kişi yoksa ne yapsın. ID’ye göre aramada yapacağız. Hadi Başlayalım..

Activity_main.xml Dosyamız..

Tasarım şu şekilde olucak.2015-09-11_11h06_49

<RelativeLayout xmlns:android="//schemas.android.com/apk/res/android"
    xmlns:tools="//schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:text="İsim ve Soyisim Girin" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Telefon Numarası Girin"
        android:id="@+id/textView2"
        android:layout_below="@+id/eIsim"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:hint="İsim ve Soyisim Giriniz..."
        android:ems="10"
        android:id="@+id/eIsim"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="phone"
        android:ems="10"
        android:id="@+id/eTelefon"
        android:layout_below="@+id/textView2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:hint="Telefon Numarası Giriniz.." />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Kişi Ekle"
        android:id="@+id/bEkle"
        android:layout_below="@+id/eTelefon"
        android:layout_alignRight="@+id/textView2"
        android:layout_alignEnd="@+id/textView2" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:hint="İsim Giriniz..."
        android:ems="10"
        android:id="@+id/eGetir"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="65dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Kişiyi Sil"
        android:id="@+id/bSil"
        android:layout_weight="1"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Kaydı Güncelle"
        android:id="@+id/bGuncelle"
        android:layout_alignTop="@+id/bSil"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_toRightOf="@+id/bEkle"
        android:layout_toEndOf="@+id/bEkle"
        android:layout_weight="1"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Kişiyi Getir"
        android:id="@+id/textView3"
        android:layout_above="@+id/eGetir"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Kişileri Getir"
        android:id="@+id/bGetir"
        android:layout_below="@+id/bEkle"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="İsmi Getir"
        android:id="@+id/bKisiGetir"
        android:layout_alignTop="@+id/bSil"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>

kişiler.xml Dosyamız:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="//schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TableRow
            android:id="@+id/tableRow4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:text="İsimler"
                android:textSize="20dp" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:text="Telefon Numarasi"
                android:textSize="20dp" />
        </TableRow>
    </TableLayout>

    <TextView
        android:id="@+id/tvTumKayitlar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="DBden gelecek degerler" />

</LinearLayout>

Android Manifest Dosyası :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="//schemas.android.com/apk/res/android"
    package="com.umiitkose.androiddb" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".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>
        <activity
            android:name=".TumKayitlar"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.umiitkose.androiddb.TUMKAYITLAR" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.java Dosyamız:
package com.umiitkose.androiddb;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.*;

import java.sql.SQLException;

public class MainActivity extends Activity implements View.OnClickListener {
    EditText eIsim,eTelefon,eGetir;
    Button bKisiGetir,bEkle,bSil,bGetir,bGuncelle;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        eIsim= (EditText) findViewById(R.id.eIsim);
        eTelefon= (EditText) findViewById(R.id.eTelefon);
        eGetir= (EditText) findViewById(R.id.eGetir);
        //Button Kısmı
        bEkle= (Button) findViewById(R.id.bEkle);
        bGuncelle= (Button) findViewById(R.id.bGuncelle);
        bSil= (Button) findViewById(R.id.bSil);
        bGetir= (Button) findViewById(R.id.bGetir);
        bKisiGetir= (Button) findViewById(R.id.bKisiGetir);
        bEkle.setOnClickListener(this);
        bSil.setOnClickListener(this);
        bGuncelle.setOnClickListener(this);
        bGetir.setOnClickListener(this);
        bKisiGetir.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.bEkle:
                String ad = eIsim.getText().toString();
                String telefon = eTelefon.getText().toString();

                try {
                    Veritabani db = new Veritabani(MainActivity.this);
                    db.baglantiyiAc();
                    db.isimYasBilgisiniKaydet(ad, telefon);
                    db.baglantiyiKapat();
                } catch (Exception e) {
                    // TODO: handle exception

                    Dialog hata = new Dialog(this);
                    hata.setTitle("Ekleme İşlemi");
                    TextView tvHata = new TextView(this);
                    tvHata.setText(e.toString());
                    hata.setContentView(tvHata);
                    hata.show();

                } finally {
                    Dialog dialog = new Dialog(this);
                    dialog.setTitle("Ekleme İşlemi");
                    TextView tvSonuc = new TextView(this);
                    tvSonuc.setText("BAŞARILI");
                    dialog.setContentView(tvSonuc);
                    dialog.show();
                }

                break;
            case R.id.bGetir:

                Intent i = new Intent("android.umiitkose.androiddb.TUMKAYITLAR");
                startActivity(i);

                 break;
            case R.id.bGuncelle:
                String adGuncelle=eIsim.getText().toString();
                String yasGuncelle=eTelefon.getText().toString();
                String idGuncelle=eGetir.getText().toString();

                long guncellenecekID=Long.parseLong(idGuncelle);

                Veritabani dbGuncelle=new Veritabani(MainActivity.this);
                try {
                    dbGuncelle.baglantiyiAc();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                dbGuncelle.kaydiGuncelle(guncellenecekID, adGuncelle, yasGuncelle);
                dbGuncelle.baglantiyiKapat();

                break;

            case R.id.bSil:

                String silinecekKayit=eGetir.getText().toString();
                long silinecekID=Long.parseLong(silinecekKayit);

                Veritabani dbSil=new Veritabani(MainActivity.this);
                try {
                    dbSil.baglantiyiAc();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

                dbSil.kaydiSil(silinecekID);

                dbSil.baglantiyiKapat();

                break;
            case R.id.bKisiGetir:
                String id=eGetir.getText().toString();
                long aranacakID=Long.parseLong(id);
                Veritabani db=new Veritabani(MainActivity.this);
                try {
                    db.baglantiyiAc();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

                String eldeEdilenIsim=db.getName(aranacakID);
                String eldeEdilenYas = db.getYas(aranacakID);

                db.baglantiyiKapat();

                eIsim.setText(eldeEdilenIsim);
                eTelefon.setText(eldeEdilenYas);

                break;

        }
    }
}

TumKayitlar.java Dosyamız:
package com.umiitkose.androiddb;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

import java.sql.SQLException;

/**
 * Created by um on 10.09.2015.
 */public class TumKayitlar extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.kisiler);

        TextView tv=(TextView)findViewById(R.id.tvTumKayitlar);

        Veritabani db=new Veritabani(TumKayitlar.this);
        try {
            db.baglantiyiAc();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        String tumKayitlar=db.tumKayitlar();

        db.baglantiyiKapat();

        tv.setText(tumKayitlar);

    }

}

VeriTabani.java Dosyamız:
package com.umiitkose.androiddb;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.sql.SQLException;

public class Veritabani {
    //VeriTabanı Tablo ve isim adlarını yaz
    private static final String DATABASE_ISIM = "Kisiler";
    private static final String DATABASE_TABLO = "Rehber";
    private static final int DATABASE_VERSION = 1;

    //Veritabanını kullanacak sınıfları tutan Context nesnesi
    private final Context contextim;
    //Oluşturduğumuz veritabanıyardımcı sınıfının nesnesi
    private VeritabaniHelper veritabanihelper;
    //Veritabanımızın nesnesi
    private SQLiteDatabase veritabanim;

    // Oluşturulacak insanlar tablosunun sütunları
    public static final String KEY_ROW_ID = "_id";
    public static final String KEY_ISIM = "isim";
    public static final String KEY_TELEFON = "telefon";

    public Veritabani(Context c) {
        this.contextim = c;
    }

    public Veritabani baglantiyiAc() throws SQLException {

        veritabanihelper = new VeritabaniHelper(contextim);
        veritabanim = veritabanihelper.getWritableDatabase();

        return this;

    }

    public void baglantiyiKapat() {

        veritabanihelper.close();

    }

    private static class VeritabaniHelper extends SQLiteOpenHelper {

        public VeritabaniHelper(Context contextim) {
            super(contextim, DATABASE_ISIM, null, DATABASE_VERSION);

        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            db.execSQL("CREATE TABLE " + DATABASE_TABLO + " (" + KEY_ROW_ID
                    + " INTEGER PRIMARY KEY AUTOINCREMENT , " + KEY_ISIM
                    + " TEXT NOT NULL, " + KEY_TELEFON + " TEXT NOT NULL);");

        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub

            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLO);
            onCreate(db);

        }

    }

    public long isimYasBilgisiniKaydet(String ad, String telefon) {
        // TODO Auto-generated method stub
        ContentValues cv = new ContentValues();

        cv.put(KEY_ISIM, ad);
        cv.put(KEY_TELEFON, telefon);

        return veritabanim.insert(DATABASE_TABLO, null, cv);

    }
    public String tumKayitlar() {
        // TODO Auto-generated method stub

        String[] sutunlar = new String[] { KEY_ROW_ID, KEY_ISIM, KEY_TELEFON };
        Cursor c = veritabanim.query(DATABASE_TABLO, sutunlar, null, null,
                null, null, null);

        String tumKayitlar = "";

//sütunların id'leri değişkenlere atandı
//id sütunu 0, isim sütunu 1 ve yas sütünu 2 indexlerine sahip
        int idSiraNo = c.getColumnIndex(KEY_ROW_ID);
        int isimSiraNo = c.getColumnIndex(KEY_ISIM);
        int yasSiraNo = c.getColumnIndex(KEY_TELEFON);

//tüm kayıtların okunması bu for döngüsüyle sağlandı
        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

            tumKayitlar = tumKayitlar + c.getString(idSiraNo) + "    "
                    + c.getString(isimSiraNo) + "  " + c.getString(yasSiraNo)
                    + " \n";
        }

        return tumKayitlar;
    }
    public String getName(long aranacakID) {
        // TODO Auto-generated method stub

        String[] sutunlar = new String[] { KEY_ROW_ID, KEY_ISIM, KEY_TELEFON };
        Cursor c = veritabanim.query(DATABASE_TABLO, sutunlar, KEY_ROW_ID + "="
                + aranacakID, null, null, null, null);

        if (c != null) {
            c.moveToFirst();
            String isim = c.getString(1);
            return isim;
        }

        return null;
    }

    public String getYas(long aranacakID) {
        // TODO Auto-generated method stub
        String[] sutunlar = new String[] { KEY_ROW_ID, KEY_ISIM, KEY_TELEFON };
        Cursor c = veritabanim.query(DATABASE_TABLO, sutunlar, KEY_ROW_ID + "="
                + aranacakID, null, null, null, null);

        if (c != null) {
            c.moveToFirst();
            String yas = c.getString(2);
            return yas;
        }

        return null;
    }
    public void kaydiGuncelle(long guncellenecekID, String adGuncelle,
                              String yasGuncelle) {
        // TODO Auto-generated method stub
        ContentValues cvGuncelle = new ContentValues();
        cvGuncelle.put(KEY_ISIM, adGuncelle);
        cvGuncelle.put(KEY_TELEFON, yasGuncelle);

        veritabanim.update(DATABASE_TABLO, cvGuncelle, KEY_ROW_ID + "="
                + guncellenecekID, null);

    }
    public void kaydiSil(long silinecekID) {
        // TODO Auto-generated method stub
        veritabanim .delete(DATABASE_TABLO, KEY_ROW_ID + "=" + silinecekID, null);
    }
}

Uygulamamızın kodları bunlardan oluşmaktadır. Çalıştırdığınızda veritabanına kişinizi ekleyip o kişiyi gösterip, üzerinde güncellemeler yapıp ya da o kişiyi silebilirsiniz. Çok ayrıntılı bir tasarım yapmadım. Çok geliştirilebilir. ListView’e atılarak kişiler gösterilip üzerine tıklanıldığında değiştir, sil gelebilir. Ayrıca kontrolleri de test etmedim. Bilginiz olsun. İyi günler..

14 thoughts on “Android Studio Rehber Uygulaması

  • merhaba hocam proje hangi apide çalışmaktadır ayrıca kaynak kodlarını github vb üzerinden yayınlayabilirmisin ?

    Yanıtla
    • Merhaba Hocam, Kodları takip ederseniz olmaktadır. SQLite’a bağlı bi api vs kullanmadım hocam

      Yanıtla
  • İsmail Yıldız

    Hocam Merhaba.Blogunuzu incelerken android ile ilgili yazılarınızı okudum.Ben bu sene Uludag Üniversitesi Elektronik Mühendisliginden mezun oldum.Sadece stajımın son 1 haftası kaldı.Şirkette bir proje verildi bunu yapabilmem durumunda burada işe başlayacagım.Aslında çok basit.yeni bir kod vs yazmamı istemiyorlar.İşyeri akıllı kilit yapıyor ve bu kilitler nfc vasıtasıyla(kilitte nfc tag var) android cihazla haberleşerek kontrol ediliyor(açma-kapama-şifre degiştirme).Hopinlock diye bir uygulama yapmışlar daha önce(www.kilitronik.com/hopinlock)yazınca apk dosyası çıkıyor.Android cihazda direkt çalışıyor(şifresi:101010).Ancak bu delphi ortamında yazılmış.Ben bu Apk nın java kaynak kodlarına java decompiler vasıtasıyla ulaştım ancak içinde 16 tane java dosyası,yine bir çok xml dosyası bulunuyor.Benden istenen bu kodları aynen alıp Android Studio ortamında hatta direkt kopyala-yapıştır yapıp apk ya çevirip çalıştıgını göstermek.Ama ben yazılım konusunda çok iyi degilim.İşe girersem eger elektronik tasarımla ilgilenecegim.Yazılım konusunda iyi olmadıgım için bu java dosyalarını android studioda(2 pencere açılıyor.java ve xml kısmı) nereye neyi kopyalayacagımı bilemiyorum. birde xml kısmı tasarım kısmı oldugu için önce onu tasarlayıp ona göre java kodları girilmeli diye biliyorum.Bu konuda bana yardımcı olabilrseniz çok sevinirim.Eger yardımcı olabilirseniz ben gerekli dökümanları(resim,video,uygulama) size gönderebilirm.Telefonlada iletişim kurabiliriz,eger uygunsanız benim için önemli bir konu.İyi günler.
    Index of /hopinlock
    kilitronik.com
    Konuşma Sonu
    Index of /hopinlock
    kilitronik.com

    Yanıtla
  • Engin Demir

    Merhaba Hocam oluşturduğum android uygulamada telefonumdaki rehbere ulaşmak istiyorum bunu nasıl yapabilirim ? Bu konu hakkında bir bilginiz varsa cevaplarsanız sevinirim.İyi çalışmalar.

    Yanıtla
  • gultekin

    kayıt ekleme basarili diyor ama kayıt getir ve güncellemede stop ediyor.

    Yanıtla
    • Ben bakıp ilgileneceğim belki bende hata olabilir. Bunun için özür dilerim 🙂 Belki sizde de olabilir 🙂

      Yanıtla
  • ismi ve soyadı ekledı sonra telefonrehberidb has stoppend

    Yanıtla
  • kolay gelsin. Ben bir soru veritabanı oluşturmak ve bu veritabanını da android uygulamasında kullanmak istiyorum. İlk olarak bunu sqlite browser da veritabanını kendim oluşturmam mı gerekiyor? ve bu veritabanını android uygulamamda nasıl kullanabilirim? 🙁

    Yanıtla
  • Hocam uygulamayı paylaşacağım demiştiniz ama 🙂 android studio üzerinde daha iyi incelerdik.. yinede paylaşım için teşekkürler.

    Yanıtla
  • Turgay

    Merhaba, öncelikle emeğinize sağlık.
    Bende hata aldım ve nasıl düzelticeğimi bulamadım. kayıt ekliyor fakat güncelleme ve silme işlemlerinde stop ediyor. haftaya üni de projemi teslim edeceğim bu apk yı cover yapmayı düşünüyodum. yardımcı olursanız çok iyi olur. iyi çalışmalar.

    Yanıtla
  • Yiğit

    Hocam merhabalar. Kaynak kodlarını paylaşır mısınız ?

    Yanıtla
  • Mırra

    uygulama kişileri çağırırken ve güncellerken uygulama durduruldu hatası alan arkadaşlar şuna dikkat edin;
    *kod kişileri isimleriyle değil kayıt numaralarıyla çağıracak şekilde yazılmış. yani “3 ali 0543555 ” diye kaydettiğiniz kişiyi çağırırken ali diye değil 3 diye çağıracaksınız. yoksa sizden sayısal değer beklerken string yazıyorsunuz buamıyor.

    Yanıtla

Mırra için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir