Android SQLite ile Spinner Kullanımı

Merhaba arkadaşlar,

Bugün dersimizde sizlere SQLite kullanarak Spinner ı doldurmayı anlatacağım. Uygulamalarımızda verileri saklamak istediğimiz zaman veritabanı kullanma yöntemine gideriz. Veritabanı olarak da SQLite kullanırız bunun nedeni ise, kullanımı gerçekten kolay ve anlaşılır bir yapıya sahip olmasıdır. Hem boyutunun küçük olması hem de hızlı işlem yapabilmesi nedeniyle de bir çok mobil cihazda kullanılmaktadır. Ayrıca, SQLite bir çok programlama dili ile birlikte kullanılabilir. ( Java, C#, Objective-C vb. )

SQLite her Android cihazı içerisinde yer almaktadır ve bu veritabanını kullanmak için ayrıca bir kurulum yapmanıza gerek yoktur. Fakat, veritabanını görüntülemek ve bir takım işlemleri tabloları görerek yapmak istiyorsanız eğer, Firefox Browser ın bir eklentisi olan SQLite Manager ı kurmanız gerekmektedir. Bu sayede .sqlite uzantılı dosyaları görüntüleyebilir ve hazırlayabilirsiniz. Bu eklentiyi kullanmak isterseniz Firefox tarayıcınızı açıp bu linki tıklayınız. Eklentiyi kurduktan sonra, Firefox yeniden başlayacaktır. Araçlar segmesinin altında SQLite Manager ı göreceksiniz ve ona tıklayıp açtığınızda bir çok veritabanı işlemini gerçekleştirebileceğinizi göreceksiniz. Ayrıntılı olarak incelemek isterseniz bu dersimize bakabilirsiniz.

Veritabanı kavramına da kısaca değindiğimize göre, spinner a verileri nasıl ekliyoruz bakalım :

Öncelikle bir veritabanı sınıfı oluşturmamız gerekiyor. Bu veritabanın da ders isimlerini tutacağız ve istediniği anda tutulan verileri dönderecek bir method da oluşturmamız gerekmektedir. DataBase adını verdiğim bir sınıf oluşturup SqliteOpenHelper sınıfından türettim daha sonra implement e edilmemiş diğer sınıfları ekledim. ( onCreate, onUpgrade ) ve bir constructore ihtiyacımız olduğu içinde DataBase sınıfının constructor unu oluşturdum. Sadece tek bir veri tutup ona göre işlem yapacağım için veritabanını oluşturma işlemi kolay oldu. Daha ayrıntılı nasıl kullanabilirim diyorsanız eğer SQLite kullanımı ile ilgili bu dersimizi inceleyiniz.

DataBase sınıfımıza bakalım:

DataBase.java

package com.mobilhanem.spinnersqliteexample;

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

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Alper on 30.6.2015.
 */
public class DataBase extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "spinner_database";
    private static final int DATABASE_VERSION = 1;

    private static String TABLE_NAME_SPINNER = "table_name_spinner";

    private static String TABLE_ID = "table_id";
    private static String LECTURE_NAME = "lecture_name";


    public DataBase(Context context)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME_SPINNER + "("
                + TABLE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + LECTURE_NAME + " TEXT" + ")";

        db.execSQL(CREATE_TABLE);

    }

    public List<String> getAllLectures()
    {

        SQLiteDatabase db = this.getReadableDatabase();
        String selectQuery = "SELECT  * FROM " + TABLE_NAME_SPINNER;
        Cursor cursor = db.rawQuery(selectQuery, null);
        List<String> lectrues = new ArrayList<String>();

        if (cursor.moveToFirst()) {
            do {
                  lectrues.add(cursor.getString(1));

            } while (cursor.moveToNext());
        }

        cursor.close();
        db.close();

        return lectrues;
    }

    public void addLecture(String lecture_name) {

        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(LECTURE_NAME, lecture_name);

        db.insert(TABLE_NAME_SPINNER, null, values);
        db.close();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

Şimdi ise görsellik nasıl olacak ona bakalım :

Uygulamamızda bir Edittext ( kullanıcının verileri girebilmesi için ) , bir Buton ( tıkladığımız anda veriyi hem veritabanına kaydedecek hem de Spinner ın güncellenmesini sağlayacak ) , bi de Spinner            ( girilen verileri listeleyip gösterebileceğimiz ) kullandık.

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"  tools:context=".MainActivity"
    >


    <RelativeLayout
        android:layout_marginRight="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="20dp"
        android:background="@drawable/border_layout"
        android:layout_centerInParent="true"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    <LinearLayout
        android:layout_marginBottom="10dp"
        android:id="@+id/layout_input"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <EditText
            android:hint="Lütfen Ders adını giriniz"
            android:textColor="#000000"
            android:layout_marginRight="10dp"
            android:layout_weight="1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/editText" />
    </LinearLayout>

        <View
            android:layout_marginTop="20dp"
            android:layout_marginBottom="20dp"
            android:background="#000000"
            android:id="@+id/line_layout_one"
            android:layout_below="@id/layout_input"
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="1dp"></View>

        <LinearLayout
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:id="@+id/layout_save"
        android:gravity="center_horizontal"
        android:layout_below="@id/line_layout_one"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:textColor="#000000"
            android:text="KAYDET"
            android:id="@+id/button_save" />
    </LinearLayout>



        <View
            android:layout_marginTop="20dp"
            android:layout_marginBottom="20dp"
            android:background="#000000"
            android:id="@+id/line_layout_two"
            android:layout_below="@id/layout_save"
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="1dp"></View>

    <LinearLayout
        android:layout_marginBottom="10dp"
        android:layout_below="@id/line_layout_two"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <Spinner
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/spinner_show"
            android:spinnerMode="dropdown"
            android:outlineProvider="paddedBounds" />
    </LinearLayout>
    </RelativeLayout>
</RelativeLayout>

Şimdi de MainActivity kodlarımıza bakalım :

fetchSpinnerValues()  fonksiyonuna baktığımızda , oluşturduğumuz veritabanına ulaşıyoruz ve getAllLectures() fonksiyonu ile verileri çekip , spinner ımıza koyuyoruz. Edittext in içi boş ise yani kullanıcı ders adını girmeden butona bastıysa AlertDialog kullanarak hata mesajı gösteriyoruz eğer Edittext in içi boş değilse de girilen değeri veritabanına kaydedip , Spinner ı güncelliyoruz.

MainActivity.java

package com.mobilhanem.spinnersqliteexample;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;

import java.util.List;


public class MainActivity extends Activity {

    private EditText editText;
    private Button button_save;
    private Spinner spinner_show;
    private List<String> lecture_list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = (EditText)findViewById(R.id.editText);
        button_save = (Button)findViewById(R.id.button_save);
        spinner_show = (Spinner)findViewById(R.id.spinner_show);

        fetchSpinnerValues();

        button_save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String lecture_name = editText.getText().toString();

                if(lecture_name.toString().isEmpty())
                {
                    AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
                    alertDialog.setTitle("UYARI");
                    alertDialog.setMessage("Ders adini giriniz!");
                    alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
                    alertDialog.setButton("TAMAM", new DialogInterface.OnClickListener()
                       {
                                public void onClick(DialogInterface dialog, int which) {


                                }

                            }

                    );

                    alertDialog.show();
                }
                else
                {
                    DataBase db = new DataBase(getApplicationContext());
                    db.addLecture(lecture_name);

                    deleteValue();

                    fetchSpinnerValues();

                }

            }
        });
    }

    private void fetchSpinnerValues()
    {
        DataBase db = new DataBase(getApplicationContext());

        lecture_list = db.getAllLectures();

        ArrayAdapter<String> spinner_adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.spinner_item_layout, lecture_list);

        spinner_adapter.setDropDownViewResource(R.layout.spinner_item_layout);


        spinner_show.setAdapter(spinner_adapter);


    }
    private void deleteValue()
    {
        editText.setText("");
    }


}

İşte spinnerı veritabanı kullanarak güncellemek bu kadar kolay. Bu dersimizde sizlere nasıl bir mantık izleyeceğinizi ve SQLite ile Spinner arasındaki kullanım şeklini göstermeye çalıştım umarım faydalı olmuştur. Uygulamanın kaynak kodlarını da indirip inceleyebilirsiniz.

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

Ders hakkında soru ve önerilerinizi çekinmeden yorum bırakabilirsiniz. Bol Android’li günler sizin olsun :)

Sizlerden ricamız facebook.com/mobilhanem sayfamızı beğenmenizdir. Diğer dersimde görüşmek üzere kendinize iyi bakın..

 

11

Alper Beyler

Yüksek Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği
Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği (4/3.30) (2010-2014)
Lisans : Viyana Teknik Üniversitesi / Bilgisayar Bilimleri (2013)

2 Yorum

  • İyi günler , Spinner içine Matematik ve Edebiyat sekmesi ekledim fakat Matematige basıp çıkan ekranda buton olmasını ve butona basıldıgında örnek Matris konusuna gitsin istiyorum bunu nasıl yaparım ?

    • Merhabalar, spinner da eklediğin her bir itemin positionu var matematik kaçıncı position ise seçtiğin anda Intent kullanarak yeni bir activity açtırırsın o activity in layout tasarımına buton koyarsın ve butona click eventi verirsin tıklandığı anda ise yine yeni bir activity açtırırsın intent ile.. tabi ayrı ayrı sayfalar yapmak istiyorsan böyle olacak tek bir sayfada bu istediklerim olsun dersen Fragment kullanmalısın

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?