1.从已有的内容提供器来获取数据
获取指定的程序中,指定的表
程序名是com.example.databasetest
表名是book
那么可以通过以下代码解析成Uri对象
Uri uri = Uri.parse("content://com.example.databasetest.provider/book");
例子: 从手机通讯录获取联系人信息:
try { // 查询联系人数据 cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); if (cursor != null) { while (cursor.moveToNext()) { // 获取联系人姓名 String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); // 获取联系人手机号 String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); contactsList.add(displayName + "\n" + number); } adapter.notifyDataSetChanged(); } } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } }
2.创建一个内容提供器来暴露数据
以类似数据库中表的方式将数据暴露,外部访问与数据库类似,只不过是用URI来表示外界需要访问的“数据库”
链接 http://blog.csdn.net/dmk877/article/details/50387741
总结:
1.创建一个类,extends ContentProvider,重写抽象方法
2.创建UriMatcher对象,并传入参数
static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(AUTHORITY, "book", BOOK_DIR); uriMatcher.addURI(AUTHORITY, "book/#", BOOK_ITEM); uriMatcher.addURI(AUTHORITY, "category", CATEGORY_DIR); uriMatcher.addURI(AUTHORITY, "category/#", CATEGORY_ITEM); }
3.查询等操作(类似数据库)
传入参数,获取数据库对象,用uriMartcher来匹配传入的uri,不同的匹配执行不同的操作
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // 查询数据 SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = null; switch (uriMatcher.match(uri)) { case BOOK_DIR: cursor = db.query("Book", projection, selection, selectionArgs, null, null, sortOrder); break; default: break; } return cursor; }