内容提供器

内容提供器注要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。目前,使用内容提供器是Android实现跨程序共享数据的标准方式。

内容选择器可以选择只对那一部分数据进行共享,从而保证我们的程序中的隐私数据不会有泄露的风险。

运行时权限

为了避免一些软件随意申请权限,Android采取运行时申请权限,只有在涉及到某权限时,才会让用户来决定是否同意申请。所有权限分为普通权限和危险权限,以下是Android的9种24个权限:
在这里插入图片描述

ContentResolve的基本用法

ContentResolve中的增删查改方法都是不接收表名参数的,而是使用一个Uri参数代替,这个参数被称为内容URI。内容URI给内容提供器中的数据建立了唯一的标识符,主要由两部分组成:authority和path。authority是用于对不同的应用程序作区分,一般为了避免冲突,都会采用程序包名的方式来进行命名。path则是用于对同一应用程序中不同的表作区分,通常都会添加到authority的后面。
得到URI字符串后,需要将其解析成Uri对象才可以作为参数传入。代码如下:

Uri uri = Uri.parse("content://com.example.app.provider/table1");

现在就可以使用这个Uri对象来查询表中数据,代码如下:

Cursor cursor = getContentResolver().query(
	uri,
	projection,
	selection,
	selectionArgs,
	sortOrder);

下面对这些参数进行解释:
uri:指定查询某个应用程序下的一张表;
projection:指定查询的列名;
selection:指定where的约束条件;
selectionArgs:为where中的占位符提供具体的值;
sortOrder:指定查询结果的排序方式。

查询返回的仍然是一个Cursor对象,这时就可以通过移动游标来遍历Cursor的所有行,然后再取出相应数据,代码如下:

if (cursor != null) {
	while (cursor.moveToNext()) {
		String column1 = cursor.getString(cursor.getColumnIndex("colum1"));
		int coulimn2 = cursor.getInt(cursor.getColumnIndex("column2"));
	}
}

添加数据代码:

ContentValues values = new ContentValues();
values.put("column1","text");
values.put("column2",1);
getContentResolver().insert(uri,values);

更新数据代码:

ContentValues values = new ContentValues();
values put("column1"," ")'
getConentResolver().update(uri,values,"column1 = ? and column2 = ?".new String[] { "text","1" });

删除数据代码

getContentResolver().delete(uri,"column2 = ?",new String[] {"1"});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章