内容提供器

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

  

猜你喜欢

转载自542255641.iteye.com/blog/2396523