Merhaba arkadaşlar bu gün ki makalem de SQLite database’inde provider class’ına değineceğim.
Bir önceki makalemde Contract class’ına değinmiştim. Okumadıysanız öncelikle onu okumanızı tavsiye ederim. Buradan okuyabilirsiniz.
package com.example.user.finalyproject.DataBase; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.widget.Toast; public class Provider extends ContentProvider { public static final int PRODUCTS = ..; private static final int PRODUCT_ID = ..; private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); static { sUriMatcher.addURI(ProductContract.CONTENT_AUTHORITY, ProductContract.PATH_PRODUCTS, PRODUCTS); sUriMatcher.addURI(ProductContract.CONTENT_AUTHORITY, ProductContract.PATH_PRODUCTS + "/#", PRODUCT_ID); } private DbHelper mdbHelper; @Override public boolean onCreate() { mdbHelper = new DbHelper(getContext()); return true; } @Nullable @Override public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) { SQLiteDatabase db = mdbHelper.getReadableDatabase(); Cursor cursor; int match = sUriMatcher.match(uri); switch (match) { case PRODUCTS: cursor = db.query(ProductContract.ProductEntry.TABLE_NAME, strings, s, strings1, null, null, s1); break; case PRODUCT_ID: s = ProductContract.ProductEntry._ID + "=?"; strings1 = new String[]{String.valueOf(ContentUris.parseId(uri))}; cursor = db.query(ProductContract.ProductEntry.TABLE_NAME, strings, s, strings1, null, null, s1); break; default: throw new IllegalArgumentException("Cannot query unknown URI" + uri); } cursor.setNotificationUri(getContext().getContentResolver(), uri); return cursor; } @Nullable @Override public String getType(@NonNull Uri uri) { final int match = sUriMatcher.match(uri); switch (match) { case PRODUCTS: return ProductContract.ProductEntry.CONTENT_LIST_TYPE; case PRODUCT_ID: return ProductContract.ProductEntry.CONTENT_ITEM_TYPE; default: throw new IllegalStateException("Unknown URI " + uri + " with match " + match); } } @Nullable @Override public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) { final int match = sUriMatcher.match(uri); switch (match) { case PRODUCTS: return insertProduct(uri, contentValues); default: throw new IllegalArgumentException("Insertion is not supported for " + uri); } } @Override public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) { SQLiteDatabase db = mdbHelper.getWritableDatabase(); int rowsDeleted; final int match = sUriMatcher.match(uri); switch (match) { case PRODUCTS: rowsDeleted = db.delete(ProductContract.ProductEntry.TABLE_NAME, s, strings); break; case PRODUCT_ID: s = ProductContract.ProductEntry._ID + "=?"; strings = new String[]{String.valueOf(ContentUris.parseId(uri))}; rowsDeleted = db.delete(ProductContract.ProductEntry.TABLE_NAME, s, strings); break; default: throw new IllegalArgumentException("You cannot delete " + uri); } if (rowsDeleted != 0) { getContext().getContentResolver().notifyChange(uri, null); } return rowsDeleted; } @Override public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) { if (contentValues.containsKey(ProductContract.ProductEntry.COLUMN_PRODUCT_NAME)) { String name = contentValues.getAsString(ProductContract.ProductEntry.COLUMN_PRODUCT_NAME); if (name == null) { throw new IllegalArgumentException("Enter the product name"); } } if (contentValues.containsKey(ProductContract.ProductEntry.COLUMN_PRODUCT_QUANTITY)) { Integer quantity = contentValues.getAsInteger(ProductContract.ProductEntry.COLUMN_PRODUCT_QUANTITY); if (quantity != null && quantity < 0) { throw new IllegalArgumentException("enter the quentity"); } } if (contentValues.containsKey(ProductContract.ProductEntry.COLUMN_PRODUCT_PRICE)) { Integer price = contentValues.getAsInteger(ProductContract.ProductEntry.COLUMN_PRODUCT_PRICE); if (price != null && price < 0) { throw new IllegalArgumentException("price will be correct"); } } if (contentValues.size() == 0) { return 0; } SQLiteDatabase db = mdbHelper.getReadableDatabase(); int rowsUpdated = db.update(ProductContract.ProductEntry.TABLE_NAME, contentValues, s, strings); if (rowsUpdated == -1) { Toast.makeText(getContext(), "Update is not succesful", Toast.LENGTH_SHORT).show(); return 0; } if (rowsUpdated != 0) { getContext().getContentResolver().notifyChange(uri, null); } return rowsUpdated; } private Uri insertProduct(Uri uri, ContentValues values) { String name = values.getAsString(ProductContract.ProductEntry.COLUMN_PRODUCT_NAME); if (name == null) { throw new IllegalArgumentException("Enter the product name"); } Integer quantity = values.getAsInteger(ProductContract.ProductEntry.COLUMN_PRODUCT_QUANTITY); if (quantity != null && quantity < 0) { throw new IllegalArgumentException("Enter the quantıty"); } Integer price = values.getAsInteger(ProductContract.ProductEntry.COLUMN_PRODUCT_PRICE); if (price != null && price < 0) { throw new IllegalArgumentException("Product price should be valid"); } SQLiteDatabase db = mdbHelper.getReadableDatabase(); long id = db.insert(ProductContract.ProductEntry.TABLE_NAME, null, values); if (id == -1) { Toast.makeText(getContext(), "Insert ıs not sucssesful", Toast.LENGTH_SHORT).show(); return null; } getContext().getContentResolver().notifyChange(uri, null); return ContentUris.withAppendedId(uri, id); } }
Bu class ile insert,update,delete gibi işlemlerde yapmak istediğimiz işlemleri kodluyoruz. Bütün işlemlerin ayrı ayrı methodları vardır. İçeriğini kendi projemize göre revize edebiliriz.
Bir makalenin daha sonuna geldik, esenle kalın..