Bu dersimizde content provider kavramını detaylı bir şekilde anlatıp, mini rehber uygulaması yapacağız. Veritabanında olan verileri content provider kullanarak kullanıma sunacağız.
Content provider yapısal bir data kümesine erişimi sağlayan soyut sınıftır. Bu yapıyı veri paylaşmak, hataları azaltmak ve diğer frameworklerle etkileşim halinde olmak için kullanırız.
Kısaca kullanıcı arayüzü ile veri kaynağı arasındaki katmandır. Böylece verilerle ilgili tüm yapıları tek bir yapı içinde saklamış oluruz.
Bazı methodları vardır. oncreate, query, insert, update, delete ve getType…
Content provider kullanırken bilmemiz gereken bir kavram vardır : Content URI. Bu kavram veri kaynağına erişimi sağlayan ve eşsiz bir linktir aslında. Mesela content://com.emrealtunbilek.android.notdefteri.notlar/2
Content URI content:// ile başlar. Sonrasında gelen com.emrealtunbilek.android.notdefteri kısmına authority denir ve erişilecek uygulamayı gösterir. Sonrasında gelen notlar erişilecek verinin ne olduğundan ve 2 sayısı ise notlar tablosundaki id’si 2 olan veriye erişmek istediğimizi söylemek için kullandığımız kısımdır.
Daha fazla açıklamayı videoda bulabilirsiniz. Bu derste yazılan kodlar aşağıdaki gibidir.
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 |
package emrealtunbilek.com.minirehber; import android.content.ContentProvider; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; import android.support.annotation.NonNull; import android.support.annotation.Nullable; public class KisiProvider extends ContentProvider{ SQLiteDatabase db; private final static String DATABASE_NAME="kisiler.db"; private final static int DATABASE_VERSION=1; private final static String KISILER_TABLE_NAME="kisiler"; private final static String CREATE_KISILER_TABLE=" CREATE TABLE "+KISILER_TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, " + " name TEXT NOT NULL);"; @Override public boolean onCreate() { DatabaseHelper helper=new DatabaseHelper(getContext()); db=helper.getWritableDatabase(); return false; } @Nullable @Override public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { return null; } @Nullable @Override public String getType(@NonNull Uri uri) { return null; } @Nullable @Override public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) { return null; } @Override public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) { return 0; } @Override public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) { return 0; } private class DatabaseHelper extends SQLiteOpenHelper{ public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_KISILER_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + KISILER_TABLE_NAME); onCreate(db); } } } |
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 |
<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"> <Button android:id="@+id/btnTumKisiler" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:onClick="tumKisileriGoster" android:text="Tüm Kişiler" /> <TextView android:id="@+id/tvTumKisiler" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:text="TÜM KİŞİLER" android:layout_below="@+id/btnYeniKisi" android:layout_alignParentStart="true" android:layout_marginTop="73dp" /> <EditText android:id="@+id/etSilinecekID" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/btnTumKisiler" android:layout_marginTop="10dp" android:ems="10" android:hint="Silinecek ID" android:inputType="number" /> <Button android:id="@+id/btnKisiSil" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/btnTumKisiler" android:layout_marginLeft="30dp" android:layout_marginStart="30dp" android:layout_toEndOf="@+id/etSilinecekID" android:layout_toRightOf="@+id/etSilinecekID" android:onClick="kisiSil" android:text="Sil" /> <EditText android:id="@+id/etGosterilecekID" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/etSilinecekID" android:layout_marginTop="10dp" android:ems="10" android:hint="Gösterilecek ID" android:inputType="number" /> <Button android:id="@+id/btnGosterilecekKisi" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/btnKisiSil" android:layout_marginLeft="30dp" android:layout_marginStart="30dp" android:layout_toEndOf="@+id/etGosterilecekID" android:layout_toRightOf="@+id/etGosterilecekID" android:onClick="kisiGoster" android:text="Bul" /> <EditText android:id="@+id/etYeniKisi" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/etGosterilecekID" android:layout_marginTop="10dp" android:ems="10" android:hint="Yeni Kişi Adı" android:inputType="textPersonName" /> <Button android:id="@+id/btnYeniKisi" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignTop="@+id/etYeniKisi" android:layout_below="@+id/btnGosterilecekKisi" android:layout_marginLeft="30dp" android:layout_marginStart="30dp" android:layout_toEndOf="@+id/etYeniKisi" android:layout_toRightOf="@+id/etYeniKisi" android:onClick="yeniKisiEkle" android:text="Ekle" /> </RelativeLayout> |
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 |
package emrealtunbilek.com.minirehber; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity { EditText silinecekID, gosterilecekID, yeniID; TextView tumKisiler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); silinecekID= (EditText) findViewById(R.id.etSilinecekID); gosterilecekID= (EditText) findViewById(R.id.etGosterilecekID); yeniID = (EditText) findViewById(R.id.etYeniKisi); tumKisiler= (TextView) findViewById(R.id.tvTumKisiler); } public void yeniKisiEkle(View view) { } public void tumKisileriGoster(View view) { } public void kisiSil(View view) { } public void kisiGoster(View view) { } } |