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..
<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..
merhaba hocam proje hangi apide çalışmaktadır ayrıca kaynak kodlarını github vb üzerinden yayınlayabilirmisin ?
Merhaba Hocam, Kodları takip ederseniz olmaktadır. SQLite’a bağlı bi api vs kullanmadım hocam
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
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.
kayıt ekleme basarili diyor ama kayıt getir ve güncellemede stop ediyor.
Ben bakıp ilgileneceğim belki bende hata olabilir. Bunun için özür dilerim 🙂 Belki sizde de olabilir 🙂
bekliyom haccı
ismi ve soyadı ekledı sonra telefonrehberidb has stoppend
Hatayı tam anlamadım 🙁
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? 🙁
Hocam uygulamayı paylaşacağım demiştiniz ama 🙂 android studio üzerinde daha iyi incelerdik.. yinede paylaşım için teşekkürler.
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.
Hocam merhabalar. Kaynak kodlarını paylaşır mısınız ?
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.