reference: http://jlins.javaeye.com/blog/561434
- query(Uri, String[], String, String) which returns data to the caller
- insert(Uri, ContentValues) which inserts new data into the content provider
- update(Uri, ContentValues, String[]) which updates existing data in the content provider
-
- delete(Uri, String[]) which deletes data from the content provider
- getType(Uri) which returns the MIME type of data in the content provider
- 在你自己的类中,你需要定义一个public static final Uri 命名为CONTENT_URI。
- public class BooksProvider extends ContentProvider
- {
- public static final String PROVIDER_NAME =
- "MyContentProvider";
- public static final Uri CONTENT_URI =
- Uri.parse("content://"+ PROVIDER_NAME + "/books");
- public static final String _ID = "_id";
- public static final String TITLE = "title";
- public static final String ISBN = "isbn";
- private static final int BOOKS = 1;
- private static final int BOOK_ID = 2;
- private static final UriMatcher uriMatcher;
- static{
- uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
- uriMatcher.addURI(PROVIDER_NAME, "books", BOOKS);
- uriMatcher.addURI(PROVIDER_NAME, "books/#", BOOK_ID);
- }
- //---for database use---
- private sqliteDatabase booksDB;
- private static final String DATABASE_NAME = "Books";
- private static final String DATABASE_TABLE = "titles";
- private static final int DATABASE_VERSION = 1;
- private static final String DATABASE_CREATE =
- "create table " + DATABASE_TABLE +
- " (_id integer primary key autoincrement, "
- + "title text not null, isbn text not null);";
- @Override
- public boolean onCreate() {
- Context context = getContext();
- DatabaseHelper dbHelper = new DatabaseHelper(context);
- booksDB = dbHelper.getWritableDatabase();
- return (booksDB == null)? false:true;
- }
- private static class DatabaseHelper extends sqliteOpenHelper
- {
- DatabaseHelper(Context context) {
- super(context, DATABASE_NAME, null, DATABASE_VERSION);
- }
- @Override
- public void onCreate(sqliteDatabase db)
- {
- db.execsql(DATABASE_CREATE);
- }
- @Override
- public void onUpgrade(sqliteDatabase db, int oldVersion,
- int newVersion) {
- Log.w("Content provider database",
- "Upgrading database from version " +
- oldVersion + " to " + newVersion +
- ", which will destroy all old data");
- db.execsql("DROP TABLE IF EXISTS titles");
- onCreate(db);
- }
- }
- @Override
- public String getType(Uri uri) {
- switch (uriMatcher.match(uri)){
- //---get all books---
- case BOOKS:
- return "vnd.android.cursor.dir/vnd.learn2develop.books ";
- //---get a particular book---
- case BOOK_ID:
- return "vnd.android.cursor.item/vnd.learn2develop.books ";
- default:
- throw new IllegalArgumentException("Unsupported URI: " + uri);
- }
- }
- @Override
- public Cursor query(Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
- sqliteQueryBuilder sqlBuilder = new sqliteQueryBuilder();
- sqlBuilder.setTables(DATABASE_TABLE);
- if (uriMatcher.match(uri) == BOOK_ID)
- //---if getting a particular book---
- sqlBuilder.appendWhere(
- _ID + " = " + uri.getPathSegments().get(1));
- if (sortOrder==null || sortOrder=="")
- sortOrder = TITLE;
- Cursor c = sqlBuilder.query(
- booksDB,
- projection,
- selection,
- selectionArgs,
- null,
- null,
- sortOrder);
- //---register to watch a content URI for changes---
- c.setNotificationUri(getContext().getContentResolver(), uri);
- return c;
- }
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- //---add a new book---
- long rowID = booksDB.insert(
- DATABASE_TABLE, "", values);
- //---if added successfully---
- if (rowID>0)
- {
- Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);
- getContext().getContentResolver().notifyChange(_uri,null);
- return _uri;
- }
- throw new sqlException("Failed to insert row into " + uri);
- }
- @Override
- public int delete(Uri arg0, String arg1, String[] arg2) {
- // arg0 = uri
- // arg1 = selection
- // arg2 = selectionArgs
- int count=0;
- switch (uriMatcher.match(arg0)){
- case BOOKS:
- count = booksDB.delete(
- DATABASE_TABLE,
- arg1,
- arg2);
- break;
- case BOOK_ID:
- String id = arg0.getPathSegments().get(1);
- count = booksDB.delete(
- DATABASE_TABLE,
- _ID + " = " + id +
- (!TextUtils.isEmpty(arg1) ? " AND (" +
- arg1 + ')' : ""),
- arg2);
- break;
- default: throw new IllegalArgumentException(
- "UnkNown URI " + arg0);
- }
- getContext().getContentResolver().notifyChange(arg0, null);
- return
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。