您的位置:首页 > 编程语言 > PHP开发

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);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: