【Android-ContentProvider】contentProvider基础用法详解及相关代码

本文详细讲解了Android ContentProvider的基础用法,包括创建ContentProvider、在manifest中注册、URI校验、实现query方法,以及模拟第三方应用如何通过ContentProvider访问数据库。通过示例展示了ContentProvider在数据库共享中的应用,包括查询、插入等操作。

本文是针对ContentProvider基础用法的模拟:
ContentProvider主要是用于将数据库变为provider提供给第三方使用的控件
本文将创建一个数据库,一个第三方使用者来演示如何使用该组件。

具体步骤:

  1. 写一个内容提供者,继承自contentprovider
  2. 在mainfest中注册,并开启权限
  3. 校验URI的工具类和指定相关规则
  4. 以查询为例,写query方法
  5. 模拟一个第三方应用去调用数据库中的内容:
    5.1、拿到一个contentResolver
    5.2、根据uri来获得cursor
    5.3、通过cursor来对数据库进行操作
    ————————————————————————————————————————————————

1、写一个contentProvider继承自ContentProvider:

在这里插入图片描述

2、在manifest中注册

四大组件都需要在manifest中进行注册
authority处一般来说填写的是包名,此处可以添加多个权限(但是后面的matcher中只能设置一个权限)
此处的exported表示其他应用也可读取的权限:
在这里插入图片描述

3、URI的校验方法

manifest中声明的provider中可以添加多个权限,但是此处只能放入一个参数!
在这里插入图片描述
注意!
规则中的path如果修改了,则在第三方应用中的URI也要添加上该path,这样才能通过校验(一般来说,path表示表名)
在这里插入图片描述
在这里插入图片描述

4、编写query方法

query方法根据权限来进行操作(如果匹配权限则进行query操作,如果不匹配则抛出异常)

在这里插入图片描述

5、模拟一个第三方应用

button设置点击事件,先拿到一个contentresolver,创建一个URI,拿到对方的cursor再进行query操作:
在这里插入图片描述

在这里插入图片描述

其他增删改查操作也都如此:

再以insert为例:

在第三方应用中设置button添加点击事件(点击按钮时插入数据)

在这里插入图片描述

在数据库中添加insert语句

在这里插入图片描述

第三方应用中创建内容观察者观察变化

在这里插入图片描述

在这里插入图片描述

ContentProvider中:
DAO接口:

public interface IUserDao {
   
   
    /**
     * 添加用户
     * @param user
     * @return
     */
    long addUser(User user);

    /**
     * 删除用户
     * @param
     * @return
     */
    int delUserById(int id);


    /**
     * 更新用户信息
     * @param user
     * @return
     */
    int updateUser(User user);

    /**
     * 查询用户记录
     * @param id
     * @return
     */
    User getUserById(int id);

    /**
     * 获取所有用户记录
     * @param
     * @return
     */
    List<User> listAllUser();

}

DAO实现类:

public class UserDaoImpl implements IUserDao {
   
   

    private final UserDatabaseHelper muserDatabaseHelper;

    /**
     * 构造方法,实例化数据库对象
     * @param context
     */
    public UserDaoImpl(Context context){
   
   
        muserDatabaseHelper = new UserDatabaseHelper(context);
    }

    /**
     * 插入user,db.insert的返回值是long类型的,返回的是行的ID,操作失败时返回-1
     * @param user
     * @return
     */
    @Override
    public long addUser(User user) {
   
   
        SQLiteDatabase db=muserDatabaseHelper.getWritableDatabase();//获取数据库
        ContentValues values=new ContentValues();  //键和键值的形式存入contextvalues中,ID是自动增长的故不用特地去设置
        values.put(Constants.FILED_USER_NAME,user.getUserName());
        values.put(Constants.FILED_USER_SEX,user.getSex());
        values.put(Constants.FILED_PASSWORD,user.getPassword());
        values.put(Constants.FILED_USER_AGE,user.getAge());

        long result=db.insert(Constants.TABLE_NAME,null,values); //没有values就去创建一个contextvalues
        db.close();
        return result;
    }

    /**
     * 删除user,根据ID删除,返回值也是一个int类型,返回的是删除的行数
     */
    @Override
    public int delUserById(int id) {
   
   
        SQLiteDatabase db=muserDatabaseHelper.getWritableDatabase();//获取数据库
        int result=db.delete(Constants.TABLE_NAME,Constants.FILED_ID+" =?",new String[]{
   
   id + " "});
        db.close();
        return result;
    }


    /**
     * 更新用户数据,根据id更新内容,返回值表示影响的行数
     * @param user
     * @return
     */
    @Override
    public int updateUser(User user) {
   
   
        SQLiteDatabase db=muserDatabaseHelper.getWritableDatabase();//获取数据库

        ContentValues values=new ContentValues();

        values.put(Constants.FILED_USER_NAME,user.getUserName());
        values.put(Constants.FILED_USER_SEX,user.getSex());
        values.put(Constants.FILED_PASSWORD,user.getPassword(
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值