Android için kütüphaneye kitap ekleme programı
Bugün sizler için lazım olacağını düşündüğüm bir şey paylaşmak istiyorum. Android son zamanlarda gerçekten çok önemli bir programala dili olarak ortaya çıktı. Bunun için Türkiye’de olmak üzere tüm dünyada bir anda Android Programcıları oluşmaya başladı. Onun için sizlere Android kütüphane örnek programını sizlerle paylaşıyorum. Takıldığınız yapamadığını bir yer olduğunda lütfen ama lütfen sorun… Ayrıca içinde SQLite bağlantılıdır.
Dipçe: Arkadaşlar bunu çalışmanız sırasında size hata vermemesi için lütfen önce bir sanal Android makina, telefon oluşturun ve AndroidManifest.xml dosyasından değerleri 22 yapın.
<uses-sdk
android:minSdkVersion="22"
android:targetSdkVersion="22" />
Database.java
package com.mobilhanem.sqllitedatabase;
import java.util.ArrayList;
import java.util.HashMap;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class Database extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "sqllite_database";//database adı
private static final String TABLE_NAME = "kitap_listesi";
private static String KITAP_ADI = "kitap_adi";
private static String KITAP_ID = "id";
private static String KITAP_YAZARI = "yazar";
private static String KITAP_BASIM_YILI = "yil";
private static String KITAP_FIYATI = "fiyat";
public Database(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) { // Databesi oluşturuyoruz.Bu methodu biz çağırmıyoruz. Databese de obje oluşturduğumuzda otamatik çağırılıyor.
String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ KITAP_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ KITAP_ADI + " TEXT,"
+ KITAP_YAZARI + " TEXT,"
+ KITAP_BASIM_YILI + " TEXT,"
+ KITAP_FIYATI + " TEXT" + ")";
db.execSQL(CREATE_TABLE);
}
public void kitapSil(int id){ //id si belli olan row u silmek için
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, KITAP_ID + " = ?",
new String[] { String.valueOf(id) });
db.close();
}
public void kitapEkle(String kitap_adi, String kitap_yazari,String kitap_basim_yili,String kitap_fiyat) {
//kitapEkle methodu ise adı üstünde Databese veri eklemek için
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KITAP_ADI, kitap_adi);
values.put(KITAP_YAZARI, kitap_yazari);
values.put(KITAP_BASIM_YILI, kitap_basim_yili);
values.put(KITAP_FIYATI, kitap_fiyat);
db.insert(TABLE_NAME, null, values);
db.close(); //Database Bağlantısını kapattık*/
}
public HashMap<String, String> kitapDetay(int id){
//Databeseden id si belli olan row u çekmek için.
//Bu methodda sadece tek row değerleri alınır.
//HashMap bir çift boyutlu arraydir.anahtar-değer ikililerini bir arada tutmak için tasarlanmıştır.
//mesala map.put("x","300"); mesala burda anahtar x değeri 300.
HashMap<String,String> kitap = new HashMap<String,String>();
String selectQuery = "SELECT * FROM " + TABLE_NAME+ " WHERE id="+id;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// Move to first row
cursor.moveToFirst();
if(cursor.getCount() > 0){
kitap.put(KITAP_ADI, cursor.getString(1));
kitap.put(KITAP_YAZARI, cursor.getString(2));
kitap.put(KITAP_BASIM_YILI, cursor.getString(3));
kitap.put(KITAP_FIYATI, cursor.getString(4));
}
cursor.close();
db.close();
// return kitap
return kitap;
}
public ArrayList<HashMap<String, String>> kitaplar(){
//Bu methodda ise tablodaki tüm değerleri alıyoruz
//ArrayList adı üstünde Array lerin listelendiği bir Array.Burda hashmapleri listeleyeceğiz
//Herbir satırı değer ve value ile hashmap a atıyoruz. Her bir satır 1 tane hashmap arrayı demek.
//olusturdugumuz tüm hashmapleri ArrayList e atıp geri dönüyoruz(return).
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + TABLE_NAME;
Cursor cursor = db.rawQuery(selectQuery, null);
ArrayList<HashMap<String, String>> kitaplist = new ArrayList<HashMap<String, String>>();
if (cursor.moveToFirst()) {
do {
HashMap<String, String> map = new HashMap<String, String>();
for(int i=0; i<cursor.getColumnCount();i++)
{
map.put(cursor.getColumnName(i), cursor.getString(i));
}
kitaplist.add(map);
} while (cursor.moveToNext());
}
db.close();
// return kitap liste
return kitaplist;
}
public void kitapDuzenle(String kitap_adi, String kitap_yazari,String kitap_basim_yili,String kitap_fiyat,int id) {
SQLiteDatabase db = this.getWritableDatabase();
//Bu methodda ise var olan veriyi güncelliyoruz(update)
ContentValues values = new ContentValues();
values.put(KITAP_ADI, kitap_adi);
values.put(KITAP_YAZARI, kitap_yazari);
values.put(KITAP_BASIM_YILI, kitap_basim_yili);
values.put(KITAP_FIYATI, kitap_fiyat);
// updating row
db.update(TABLE_NAME, values, KITAP_ID + " = ?",
new String[] { String.valueOf(id) });
}
public int getRowCount() {
// Bu method bu uygulamada kullanılmıyor ama her zaman lazım olabilir.Tablodaki row sayısını geri döner.
//Login uygulamasında kullanacağız
String countQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
int rowCount = cursor.getCount();
db.close();
cursor.close();
// return row count
return rowCount;
}
public void resetTables(){
//Bunuda uygulamada kullanmıyoruz. Tüm verileri siler. tabloyu resetler.
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, null, null);
db.close();
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
}
</pre>
<pre>
KitapDetay.java
package com.mobilhanem.sqllitedatabase;
import java.util.HashMap;
import com.mobilhanem.sqlliteexample.R;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class KitapDetay extends Activity {
Button b1,b2;
TextView t1,t2,t3,t4;
int id;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_kitapdetay);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle("Kitap Listesi");
b1 = (Button)findViewById(R.id.button1);
b2 = (Button)findViewById(R.id.button2);
t1 = (TextView)findViewById(R.id.adi);
t2 = (TextView)findViewById(R.id.yazari);
t3 = (TextView)findViewById(R.id.yili);
t4 = (TextView)findViewById(R.id.fiyati);
Intent intent=getIntent();
id = intent.getIntExtra("id", 0);//id değerini integer olarak aldık. Burdaki 0 eğer değer alınmazsa default olrak verilecek değer
Database db = new Database(getApplicationContext());
HashMap<String, String> map = db.kitapDetay(id);//Bu id li row un değerini hashmap e aldık
t1.setText(map.get("kitap_adi"));
t2.setText(map.get("yazar").toString());
t3.setText(map.get("yil").toString());
t4.setText(map.get("fiyat").toString());
b1.setOnClickListener(new View.OnClickListener() {//Kitap düzenle butonuna tıklandıgında tekrardan kitabın id sini gönderdik
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), KitapDuzenle.class);
intent.putExtra("id", (int)id);
startActivity(intent);
}
});
b2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(KitapDetay.this);
alertDialog.setTitle("Uyarı");
alertDialog.setMessage("Kitap Silinsin mi?");
alertDialog.setPositiveButton("Evet", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
Database db = new Database(getApplicationContext());
db.kitapSil(id);
Toast.makeText(getApplicationContext(), "Kitap Başarıyla Silindi", Toast.LENGTH_LONG).show();
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);//bu id li kitabı sildik ve Anasayfaya döndük
finish();
}
});
alertDialog.setNegativeButton("Hayır", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
}
});
alertDialog.show();
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default: return super.onOptionsItemSelected(item);
}
}
}
KitapDuzenle.java
package com.mobilhanem.sqllitedatabase;
import java.util.HashMap;
import com.mobilhanem.sqlliteexample.R;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class KitapDuzenle extends Activity {
Button b1;
EditText e1,e2,e3,e4;
int id;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_kitapduzenle);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle("Kitap Detay");
b1 = (Button)findViewById(R.id.button1);
e1 = (EditText)findViewById(R.id.editText1);
e2 = (EditText)findViewById(R.id.editText2);
e3 = (EditText)findViewById(R.id.editText3);
e4 = (EditText)findViewById(R.id.editText4);
Intent intent=getIntent();
id = intent.getIntExtra("id", 0);
Database db = new Database(getApplicationContext());
HashMap<String, String> map = db.kitapDetay(id);
e1.setText(map.get("kitap_adi"));
e2.setText(map.get("yazar").toString());
e3.setText(map.get("yil").toString());
e4.setText(map.get("fiyat").toString());
b1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String adi,yazari,yili,fiyati;
adi = e1.getText().toString();
yazari = e2.getText().toString();
yili = e3.getText().toString();
fiyati = e4.getText().toString();
if(adi.matches("") || yazari.matches("") || yili.matches("") || fiyati.matches("") ){
Toast.makeText(getApplicationContext(), "Tüm Bilgileri Eksiksiz Doldurunuz", Toast.LENGTH_LONG).show();
}else{
Database db = new Database(getApplicationContext());
db.kitapDuzenle(adi, yazari, yili, fiyati,id);//gönderdiğimiz id li kitabın değperlerini güncelledik.
db.close();
Toast.makeText(getApplicationContext(), "Kitabınız Başarıyla Düzenlendi.", Toast.LENGTH_LONG).show();
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
finish();
}
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default: return super.onOptionsItemSelected(item);
}
}
}
</pre>
<pre></pre>
<pre>
KitapEkle.java
package com.mobilhanem.sqllitedatabase; import com.mobilhanem.sqlliteexample.R; import android.app.ActionBar; import android.app.Activity; import android.os.Bundle; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class KitapEkle extends Activity { Button b1; EditText e1,e2,e3,e4; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_kitapekle); ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setTitle("Kitap Listesi"); b1 = (Button)findViewById(R.id.button1); e1 = (EditText)findViewById(R.id.editText1); e2 = (EditText)findViewById(R.id.editText2); e3 = (EditText)findViewById(R.id.editText3); e4 = (EditText)findViewById(R.id.editText4); b1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { String adi,yazari,yili,fiyati; adi = e1.getText().toString(); yazari = e2.getText().toString(); yili = e3.getText().toString(); fiyati = e4.getText().toString(); if(adi.matches("") || yazari.matches("") || yili.matches("") || fiyati.matches("") ){ Toast.makeText(getApplicationContext(), "Tüm Bilgileri Eksiksiz Doldurunuz", Toast.LENGTH_LONG).show(); }else{ Database db = new Database(getApplicationContext()); db.kitapEkle(adi, yazari, yili, fiyati);//kitap ekledik db.close(); Toast.makeText(getApplicationContext(), "Kitabınız Başarıyla Eklendi.", Toast.LENGTH_LONG).show(); e1.setText(""); e2.setText(""); e3.setText(""); e4.setText(""); } } }); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; default: return super.onOptionsItemSelected(item); } } } </pre> <pre>
MainActivity.java
package com.mobilhanem.sqllitedatabase; import java.util.ArrayList; import java.util.HashMap; import com.mobilhanem.sqlliteexample.R; import android.os.Bundle; import android.app.ActionBar; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends Activity { ListView lv; ArrayAdapter<String> adapter; ArrayList<HashMap<String, String>> kitap_liste; String kitap_adlari[]; int kitap_idler[]; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(false); } public void onResume() { //neden onResume metodu kullandığımı ders içinde anlattım. super.onResume(); Database db = new Database(getApplicationContext()); // Db bağlantısı oluşturuyoruz. İlk seferde database oluşturulur. kitap_liste = db.kitaplar();//kitap listesini alıyoruz if(kitap_liste.size()==0){//kitap listesi boşsa Toast.makeText(getApplicationContext(), "Henüz Kitap Eklenmemiş.\nYukarıdaki + Butonundan Ekleyiniz", Toast.LENGTH_LONG).show(); }else{ kitap_adlari = new String[kitap_liste.size()]; // kitap adlarını tutucamız string arrayi olusturduk. kitap_idler = new int[kitap_liste.size()]; // kitap id lerini tutucamız string arrayi olusturduk. for(int i=0;i<kitap_liste.size();i++){ kitap_adlari[i] = kitap_liste.get(i).get("kitap_adi"); //kitap_liste.get(0) bize arraylist içindeki ilk hashmap arrayini döner. Yani tablomuzdaki ilk satır değerlerini //kitap_liste.get(0).get("kitap_adi") //bize arraylist içindeki ilk hashmap arrayin anahtarı kitap_adi olan value döner kitap_idler[i] = Integer.parseInt(kitap_liste.get(i).get("id")); //Yukarıdaki ile aynı tek farkı değerleri integer a çevirdik. } //Kitapları Listeliyoruz ve bu listeye listener atıyoruz lv = (ListView) findViewById(R.id.list_view); adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.kitap_adi, kitap_adlari); lv.setAdapter(adapter); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { //Listedeki her hangibir yere tıklandıgında tıklanan satırın sırasını alıyoruz. //Bu sıra id arraydeki sırayla aynı oldugundan tıklanan satırda bulunan kitapın id sini alıyor ve kitap detaya gönderiyoruz. Intent intent = new Intent(getApplicationContext(), KitapDetay.class); intent.putExtra("id", (int)kitap_idler[arg2]); startActivity(intent); } }); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.ekle: KitapEkle(); return true; default: return super.onOptionsItemSelected(item); } } private void KitapEkle() { Intent i = new Intent(MainActivity.this, KitapEkle.class); startActivity(i); } } </pre> <pre>