评论

收藏

[Hbase] Android 面试题之ContentProvider使用 实例,android开发工具

数据库 数据库 发布于:2021-12-28 23:17 | 阅读数:638 | 评论:0


  • authority表示匹配的授权者名称;
  • path表示数据路径;
  • code表示返回代码。
下面咱搞个实例:
//这里的名称必须与AndroidManifest.xml中android:authorities保持一致
public?static?final?String?AUTHORITY?=?"com.scc.userprovider";
//数据路径
public?static?final?String?PATH_USERS?=?"user";
//访问ContentProvider的URL
public?static?final?Uri?CONTENT_URI?=?Uri.parse("content://"?+?AUTHORITY?+?"/"?+?PATH_USERS);
//返回代码
public?static?final?int?USER_INFO?=?1;
//创建UriMatcher对象
private?static?UriMatcher?uriMatcher;
//创建静态代码块
static?{
//实例化UriMatcher对象
uriMatcher?=?new?UriMatcher(UriMatcher.NO_MATCH);
//参数1:authority;参数2:路径;参数3:自定义代码
uriMatcher.addURI(UserInfoContent.AUTHORITY,?UserInfoContent.PATH_USERS,?USER_INFO);
}
3、注册ContentProvider
在AndroidManifest.xml文件中的 application节点下使用标签注册。样例:
<!--
android:name指定ContentProvider实现的类名
android:authorities指定ContentProvider对应Uri(相当于ContentProvider分配一个域名)
android:exported指定ContentProvider是否允许其他应用调用。
如果将该属性设置为true,则允许其他应用调用-->
<android:authorities="com.scc.userprovider"
android:name=".UserProvider"
android:exported="true"/>
五、使用ContentProvider
1、通过insert()方法添加单条数据
ContentValues?cv?=?new?ContentValues();
cv.put(UserInfoContent._ID,?bean.get_id());
cv.put(UserInfoContent.USER_NAME,?bean.getName());
cv.put(UserInfoContent.USER_AGE,?bean.getAge());
cv.put(UserInfoContent.USER_UPDATE_TIME,?bean.getUpdate_time());
Uri?uri?=?getContentResolver().insert(UserInfoContent.CONTENT_URI,?cv);
Log.e(getClass().getName(),?"insert:"?+?uri);

  • 通过bulkInsert()方法添加多条数据
ContentValues[]?arrayValues?=?new?ContentValues[10];
//实例化每一个ContentValues...
int?count?=?getContentResolver().bulkInsert(UserInfoContent.CONTENT_URI,?arrayValues);
DSC0000.jpg

2、指定ID删除单条数据
int?delete?=?getContentResolver().delete(UserInfoContent.CONTENT_URI,?"_id=12",?null);
Log.e(getClass().getName(),?"delete(失败返回-1):"?+?delete);

  • 通过selection语句删除多条数据
String?selection?=?UserInfoContent._ID?+?">12";
int?result?=?getContentResolver().delete(UserInfoContent.CONTENT_URI,?selection,?null);
DSC0001.jpg

3、修改数据
UserInfoBean?bean?=?new?UserInfoBean("蚩尤",?32,?"12:00");
ContentValues?cv?=?new?ContentValues();
cv.put(UserInfoContent.USER_NAME,?bean.getName());
cv.put(UserInfoContent.USER_AGE,?bean.getAge());
cv.put(UserInfoContent.USER_UPDATE_TIME,?bean.getUpdate_time());
getContentResolver().update(UserInfoContent.CONTENT_URI,?cv,?"_id=18",?null);
4、查询数据
Cursor?cursor?=?getContentResolver().query(UserInfoContent.CONTENT_URI,?null,?selection,?null,?null);
//循环取出游标指向的每条用户记录
while?(cursor.moveToNext())?{
UserInfoBean?user?=?new?UserInfoBean();
user.name?=?cursor.getString(cursor.getColumnIndex(UserInfoContent.USER_NAME));
user.age?=?cursor.getInt(cursor.getColumnIndex(UserInfoContent.USER_AGE));
user._id?=?cursor.getString(cursor.getColumnIndex(UserInfoContent._ID));
user.update_time?=?cursor.getString(cursor.getColumnIndex(UserInfoContent.USER_UPDATE_TIME));
userList.add(user);?//添加到用户信息列表
}
cursor.close();?//关闭数据库游标
Log.e(getClass().getName(),?"Query用户:"?+?String.format("当前共找到%d个用户",?userList.size()));
DSC0002.jpg

六、跨应用使用ContentProvider
跨应用和本应用使用ContentProvider一样的方法,这边就不做复制了。
例五的Uri是拼接字段,拼接后的结果 :
「content://com.scc.userprovider/user。」
跨平台使用getContentResolver().方法 的第一个参数:
「Uri uricontent = Uri.parse("content://com.scc.userprovider/user");」
1、新增数据+查找数据
DSC0003.jpg

2、修改数据+删除数据
DSC0004.jpg

七、java.lang.SecurityException: Permission Denial: opening provider com.scc.cp.UserProvider from ProcessRecord
解决方案:
最后
愿你有一天,真爱自己,善待自己。
本文在开源项目:Android开发不会这些?如何面试拿高薪?中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中...



关注下面的标签,发现更多相似文章