@Override public int bulkInsert(Uri uri, ContentValues[] values) { final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); final int match = uriMatcher.match(uri); switch (match) { case CONTAINER: db.beginTransaction(); int returnCount = 0; try { for (ContentValues value : values) { long _id = db.insert(RSUContract.ContainerEntry.TABLE_NAME, null, value); if (_id != -1) { returnCount++; } } db.setTransactionSuccessful(); } finally { db.endTransaction(); } getContext().getContentResolver().notifyChange(uri, null); return returnCount; default: return super.bulkInsert(uri, values); } }
@Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); final int match = uriMatcher.match(uri); int rowsUpdated; // this makes delete all rows return the number of rows deleted if (null == selection) selection = "1"; switch (match) { case CONTAINER: rowsUpdated = db.update(RSUContract.ContainerEntry.TABLE_NAME, values, selection, selectionArgs); break; case TYPE: rowsUpdated = db.update(RSUContract.TypeEntry.TABLE_NAME, values, selection, selectionArgs); break; case LOCATION: rowsUpdated = db.update(RSUContract.LocationEntry.TABLE_NAME, values, selection, selectionArgs); break; default: throw new UnsupportedOperationException("Unknown uri: " + uri); } // Because a null deletes all rows if (rowsUpdated != 0) { getContext().getContentResolver().notifyChange(uri, null); } db.close(); return rowsUpdated; }
/** * Create query to find containers by type * * @param uri * @param projection * @param sortOrder * @return */ private Cursor getContainerByTypeSettings(Uri uri, String[] projection, String sortOrder) { String typeSetting = RSUContract.ContainerEntry.getTypeSettingFromUri(uri); // Type value ti search String[] selectionArgs = new String[] {typeSetting}; // Where case for type. String selection = containerTypeByNameSelection; return containerByTypeSettingsQueryBuilder.query( mOpenHelper.getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder); }
@Nullable @Override public Uri insert(Uri uri, ContentValues values) { final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); final int match = uriMatcher.match(uri); Uri returnUri; switch (match) { case CONTAINER: { long _id = db.insert(RSUContract.ContainerEntry.TABLE_NAME, null, values); if (_id > 0) returnUri = RSUContract.ContainerEntry.buildContainerUri(_id); else throw new android.database.SQLException("Failed to insert row into " + uri); break; } case TYPE: { long _id = db.insert(RSUContract.TypeEntry.TABLE_NAME, null, values); if (_id > 0) returnUri = RSUContract.TypeEntry.buildTypeUri(_id); else throw new android.database.SQLException("Failed to insert row into " + uri); break; } case LOCATION: { long _id = db.insert(RSUContract.LocationEntry.TABLE_NAME, null, values); if (_id > 0) returnUri = RSUContract.LocationEntry.buildLocationUri(_id); else throw new android.database.SQLException("Failed to insert row into " + uri); break; } default: throw new UnsupportedOperationException("Unknown uri: " + uri); } getContext().getContentResolver().notifyChange(uri, null); db.close(); return returnUri; }
// You do not need to call this method. This is a method specifically to assist the testing // framework in running smoothly. You can read more at: // http://developer.android.com/reference/android/content/ContentProvider.html#shutdown() @Override @TargetApi(11) public void shutdown() { mOpenHelper.close(); super.shutdown(); }
@Nullable @Override public Cursor query( Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // Here's the switch statement that, given a URI, will determine what kind of request it is, // and query the database accordingly. Cursor retCursor; switch (uriMatcher.match(uri)) { // "container" case CONTAINER: { retCursor = mOpenHelper .getReadableDatabase() .query( RSUContract.ContainerEntry.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder); break; } // "container/*" case CONTAINER_WITH_TYPE: { retCursor = getContainerByTypeSettings(uri, projection, sortOrder); break; } // "type" case TYPE: { retCursor = mOpenHelper .getReadableDatabase() .query( RSUContract.TypeEntry.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder); break; } // "location" case LOCATION: { retCursor = mOpenHelper .getReadableDatabase() .query( RSUContract.LocationEntry.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder); break; } default: throw new UnsupportedOperationException("Unknown uri: " + uri); } retCursor.setNotificationUri(getContext().getContentResolver(), uri); return retCursor; }