contentprivider
2015-11-24 00:00
645 查看
/** * DataProvider * Created by Terence on 2015/11/18. */ public class DataProvider extends ContentProvider { /** * TAG */ private static final String TAG = "DataProvider"; private static final String DB_NAME = "news.db"; private static final String DB_TABLE = "NewsTable"; private static final int DB_VERSION = 1; /** * 创建newstable的SQL语句 */ private static final String DB_CREATE = "create table " + DB_TABLE + " (" + NewsUri.ID + " integer primary key autoincrement, " + NewsUri.TITLE + " text not null, " + NewsUri.SUMMARY + " text not null, " + NewsUri.URL + " text not null);"; /** * URI匹配规则 */ private static final UriMatcher mUriMatcher; static { mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); mUriMatcher.addURI(NewsUri.AUTHORITY, "item", NewsUri.ITEM); mUriMatcher.addURI(NewsUri.AUTHORITY, "item/#", NewsUri.ITEM_ID); mUriMatcher.addURI(NewsUri.AUTHORITY, "pos/#", NewsUri.ITEM_POS); } /** * news map */ private static final HashMap<String, String> mNewsProjectionMap; static { mNewsProjectionMap = new HashMap<String, String>(); mNewsProjectionMap.put(NewsUri.ID, NewsUri.ID); mNewsProjectionMap.put(NewsUri.TITLE, NewsUri.TITLE); mNewsProjectionMap.put(NewsUri.SUMMARY, NewsUri.SUMMARY); mNewsProjectionMap.put(NewsUri.URL, NewsUri.URL); } /** * */ private DBHelper dbHelper = null; /** * */ private ContentResolver mResolver = null; @Override public boolean onCreate() { Log.d(TAG, "onCreate():DataProvider Create..."); Context context = getContext(); mResolver = context.getContentResolver(); dbHelper = new DBHelper(context, DB_NAME, null, DB_VERSION); return true; } @Override public String getType(Uri uri) { Log.d(TAG, "getType():uri=" + uri); switch (mUriMatcher.match(uri)) { case NewsUri.ITEM: return NewsUri.CONTENT_TYPE; case NewsUri.ITEM_ID: case NewsUri.ITEM_POS: return NewsUri.CONTENT_ITEM_TYPE; default: throw new IllegalArgumentException("Error Uri: " + uri); } } @Override public Uri insert(Uri uri, ContentValues values) { Log.d(TAG, "insert():uri=" + uri); if(mUriMatcher.match(uri) != NewsUri.ITEM) { throw new IllegalArgumentException("Error Uri: " + uri); } SQLiteDatabase db = dbHelper.getWritableDatabase(); long id = db.insert(DB_TABLE, NewsUri.ID, values); if(id < 0) { throw new SQLiteException("Unable to insert " + values + " for " + uri); } Uri newUri = ContentUris.withAppendedId(uri, id); mResolver.notifyChange(newUri, null); return newUri; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { Log.d(TAG, "update(): uri=" + uri); SQLiteDatabase db = dbHelper.getWritableDatabase(); int count = 0; switch(mUriMatcher.match(uri)) { case NewsUri.ITEM: { count = db.update(DB_TABLE, values, selection, selectionArgs); break; } case NewsUri.ITEM_ID: { String id = uri.getPathSegments().get(1); count = db.update(DB_TABLE, values, NewsUri.ID + "=" + id + (!TextUtils.isEmpty(selection) ? " and (" + selection + ')' : ""), selectionArgs); break; } default: throw new IllegalArgumentException("Error Uri: " + uri); } mResolver.notifyChange(uri, null); return count; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { Log.d(TAG, "delete(): uri=" + uri); SQLiteDatabase db = dbHelper.getWritableDatabase(); int count = 0; switch(mUriMatcher.match(uri)) { case NewsUri.ITEM: { count = db.delete(DB_TABLE, selection, selectionArgs); break; } case NewsUri.ITEM_ID: { String id = uri.getPathSegments().get(1); count = db.delete(DB_TABLE, NewsUri.ID + "=" + id + (!TextUtils.isEmpty(selection) ? " and (" + selection + ')' : ""), selectionArgs); break; } default: throw new IllegalArgumentException("Error Uri: " + uri); } mResolver.notifyChange(uri, null); return count; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Log.d(TAG, "query(): " + uri); SQLiteDatabase db = dbHelper.getReadableDatabase(); SQLiteQueryBuilder sqlBuilder = new SQLiteQueryBuilder(); String limit = null; switch (mUriMatcher.match(uri)) { case NewsUri.ITEM: { sqlBuilder.setTables(DB_TABLE); sqlBuilder.setProjectionMap(mNewsProjectionMap); break; } case NewsUri.ITEM_ID: { String id = uri.getPathSegments().get(1); sqlBuilder.setTables(DB_TABLE); sqlBuilder.setProjectionMap(mNewsProjectionMap); sqlBuilder.appendWhere(NewsUri.ID + "=" + id); break; } case NewsUri.ITEM_POS: { String pos = uri.getPathSegments().get(1); sqlBuilder.setTables(DB_TABLE); sqlBuilder.setProjectionMap(mNewsProjectionMap); limit = pos + ", 1"; break; } default: throw new IllegalArgumentException("Error Uri: " + uri); } Cursor cursor = sqlBuilder.query(db, projection, selection, selectionArgs, null, null, TextUtils.isEmpty(sortOrder) ? NewsUri.DEFAULT_SORT_ORDER : sortOrder, limit); cursor.setNotificationUri(mResolver, uri); return cursor; } @Override public Bundle call(String method, String arg, Bundle extras) { Log.i(TAG, "call(): " + method); if(method.equals(NewsUri.METHOD_GET_ITEM_COUNT)) { return getItemCount(); } throw new IllegalArgumentException("Error method call: " + method); } /** * Get item count * @return */ private Bundle getItemCount() { Log.i(TAG, "getItemCount()..."); SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select count(*) from " + DB_TABLE, null); int count = 0; if (cursor.moveToFirst()) { count = cursor.getInt(0); } Bundle bundle = new Bundle(); bundle.putInt(NewsUri.KEY_ITEM_COUNT, count); cursor.close(); db.close(); return bundle; } /** * 数据库操作 */ private static class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DB_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE); onCreate(db); } } }
相关文章推荐
- php 翻转字符串(解决中文乱码)
- php printf,sprintf,fprintf区别
- PHP获取客户端IP
- PHPSTORM+XDEBUG断点调试PHP
- PHP实现一个ip(如:127.0.0.1)和多个域名(虚拟主机)的绑定
- Ci框架 邮件类发送邮件 & TP5使用PHPMailer发送邮箱
- thinkPHP3.2.3完整版 在sae上面的部署
- ***使用PHP实现文件上传和多文件上传
- 详谈ByteArrayOutputStream的用法
- visual studio2013 php
- PHP关系型数据库介绍
- PHP PDO调用sqlsrv的存储过程
- php之输出缓存ob
- ByteArrayInputStream 和 ByteArrayOutputStream
- PHP之const与define的区别
- thinkphp3.2模块分组的建立详细步骤
- PagerAdapter,FragmentPagerAdapter,FragmentStatePagerAdapter三者的认识
- php for循环的坑,千万不要在判断条件中使用count
- thinkphp3.1模块分组的建立详细步骤
- zabbix邮件报警(msmtp代理)