博客
关于我
[android] 内容提供者实现
阅读量:656 次
发布时间:2019-03-15

本文共 3194 字,大约阅读时间需要 10 分钟。

Android内容提供者实现详解

内容提供者是Android系统中一个强大的工具,可以用来共享应用程序之间的数据。本文将详细讲解如何实现自己的内容提供者,并通过实例来说明如何操作。

内容提供者的基础知识

内容提供者允许不同的应用程序之间共享数据,避免了直接访问其他应用程序的数据库文件。通过内容提供者,可以定义自己的数据类型和访问方式,以实现数据的安全性和互信性。在 Android 中,内容提供者的核心组件是 ContentProvider,它暴露了几个重要的方法来处理数据操作,例如 queryinsertdeleteupdate 等。

一个典型的内容提供者的实现需要以下几个关键步骤:

  • 配置UriMatcher:定义如何匹配Uri请求,决定返回哪种操作。
  • 实现ContentProvider接口:通过覆盖相关方法(如 queryinsert 等)来处理数据操作。
  • 测试和验证:通过例子验证内容提供者的正确性。
  • UriMatcher的应用

    在内容提供者中,UriMatcher 是一个重要的工具,它用于解析请求的Uri,判断请求对应的操作类型,从而选择合适的处理方法。在实现内容提供者时,我们需要创建一个UriMatcher对象,并在 static代码块中添加规则。

    默认情况下,UriMatcher returns NO_MATCH (-1) 当没有找到匹配规则的时候。在我们的实现中,我们可以通过 addURI方法来定义规则:

    static {
    matcher.addURI("com.tsh.database.personprovider", "insert", INSERT);
    matcher.addURI("com.tsh.database.personprovider", "select", SELECT);
    matcher.addURI("com.tsh.database.personprovider", "delete", DELETE);
    matcher.addURI("com.tsh.database.personprovider", "update", UPDATE);
    }

    这里,"com.tsh.database.personprovider" 是我们的内容提供者的包名,"insert"、"select" 等是操作类型,各自对应一个常量(例如INSERT=1,SELECT=2等)。

    主要方法的实现

    内容提供者需要实现一些核心方法,主要有以下几个:

    1. onCreate()

    onCreate()方法中,我们会初始化数据库帮助类,比如 PersonSQLiteOpenHelper,以便后续操作数据库。

    @Override
    public boolean onCreate() {
    helper = new PersonSQLiteOpenHelper(getContext());
    return false;
    }

    2. query()

    query()方法是用来处理数据查询的,这是内容提供者中最常用的操作。在这个方法中,我们需要做以下事情:

  • 使用UriMatcher匹配请求的Uri,判断操作类型。
  • 如果匹配成功,获取数据库的可读性数据库。
  • 调用数据库的查询方法,获取结果集,并返回。
  • @Override
    public Cursor query(Uri uri, String[] projection, String selection,
    String[] selectionArgs, String sortOrder) {
    if (matcher.match(uri) == SELECT) {
    SQLiteDatabase db = helper.getReadableDatabase();
    Cursor cursor = db.query("person", projection, selection,
    selectionArgs, null, null, sortOrder);
    return cursor;
    }
    return null;
    }

    3. getType()

    getType()方法是用来返回请求的数据类型的。这对于某些情况(如通知)来说很重要,有效类型会影响数据的处理方式。

    @Override
    public String getType(Uri uri) {
    return null;
    }

    4. insert()

    insert()方法用来将数据插入到数据库中。我们需要获取内容值(ContentValues),然后执行插入操作。

    @Override
    public Uri insert(Uri uri, ContentValues values) {
    return null;
    }

    5. delete()

    delete()方法用来删除数据。这需要一个有效的条件表达式和参数。

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
    return 0;
    }

    6. update()

    update()方法用来修改数据。这需要一个可变的行记录和可变的更新参数。

    @Override
    public int update(Uri uri, ContentValues values, String selection,
    String[] selectionArgs) {
    return 0;
    }

    测试内容提供者的实现

    为了验证我们的内容提供者是否正常工作,我们可以编写一个测试应用,通过ContentResolver来查询和操作数据。

  • 获取ContentResolver
  • 在测试应用中,调用 getContentResolver() 方法,获取通用的内容解析器对象。

    ContentResolver resolver = getContentResolver();
    1. 解析Uri
    2. 使用Uri类的 parse() 方法将字符串解析为Uri对象。

      Uri uri = Uri.parse("content://com.tsh.database.personprovider/select");
      1. 执行查询
      2. 调用 query() 方法,传入所需的参数。

        Cursor cursor = resolver.query(uri, null, null, null, null);
        1. 处理结果
        2. 遍历结果集,并将数据打印出来。

          while (cursor.moveToNext()) {
          String name = cursor.getString(cursor.getColumnIndex("name"));
          System.out.println("name" + name);
          }
          cursor.close();

          注意事项

          在使用和实现内容提供者时,需要注意以下几点:

        3. 权限管理:确保内容提供者具有足够的权限操作数据库和文件。
        4. 安全性:遵守安全最佳实践,避免未经授权的访问。
        5. 兼容性:确保内容提供者的接口和方法与其他系统和应用兼容。
        6. 错误处理:在操作数据库时,处理可能出现的异常和错误。
        7. 总结

          通过以上步骤,我们可以实现一个基本的内容提供者,满足数据共享和访问的需求。在实际开发中,可能需要根据具体需求调整规则和数据库结构,同时注意性能和安全性。

    转载地址:http://ywnmz.baihongyu.com/

    你可能感兴趣的文章
    Node.js 文件系统的各种用法和常见场景
    查看>>
    Node.js 模块系统的原理、使用方式和一些常见的应用场景
    查看>>
    Node.js 的事件循环(Event Loop)详解
    查看>>
    node.js 简易聊天室
    查看>>
    Node.js 线程你理解的可能是错的
    查看>>
    Node.js 调用微信公众号 API 添加自定义菜单报错的解决方法
    查看>>
    node.js 配置首页打开页面
    查看>>
    node.js+react写的一个登录注册 demo测试
    查看>>
    Node.js中环境变量process.env详解
    查看>>
    Node.js之async_hooks
    查看>>
    Node.js初体验
    查看>>
    Node.js升级工具n
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>
    Node.js基于Express框架搭建一个简单的注册登录Web功能
    查看>>
    node.js学习之npm 入门 —8.《怎样创建,发布,升级你的npm,node模块》
    查看>>
    Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
    查看>>
    Node.js安装及环境配置之Windows篇
    查看>>
    Node.js安装和入门 - 2行代码让你能够启动一个Server
    查看>>
    node.js安装方法
    查看>>