`
android_mylove
  • 浏览: 399857 次
社区版块
存档分类
最新评论

Android学习笔记(3)————Android四大组件之三(Content Provider)(代码示例待补全)

 
阅读更多

/********************************************************************************************
* author:conowen@大钟
* E-mail:conowen@hotmail.com
* http://blog.csdn.net/conowen
* 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。
********************************************************************************************/

1、Content Provider(内容提供者)简介

从字面上的意思来看,Content Providers是内容提供者,也就是数据的提供者,而数据的来源可以是SQLite数据库或者File存储等等方式。为了实现各个应用程序之间的数据共享,可以把应用程序的私有数据封装成ContentProviders,接着定义一个URI,向外提供统一的数据接口。其他的应用程序可以通过这个URI来访问指定的数据,然后实现各种操作,如添加(insert)、删除 (delete)、查询(query)、修改(update)。而不用去操作应用程序的底层私有数据。一般来说底层的私有数据是基于SQLite建立的。

和其他app共享数据的大体过程:

为方便其它app与用户的应用程序的ContentProvider通信,通常要自定义一个公共的Uri:CONTENT_URI,其它app通过这一Uri,与ContentProvider交流。需要注意的是,当用户自己建立好ContentProvider之后,并不直接与之打交道,而是通过ContentResolver进行操作。


2、Content Provider的使用

2.1、利用ContentResolver方法管理content Provider

Android提供了ContentResolver(内容分解器),外界的程序可以通过ContentResolver的方法来管理ContentProvider提供的数据。

简单来说,Resolver就是分解、管理 Provider的数据内容。在理解Resolver之前,应该知道URI。事实上可以这样理解,URI就是一个地址,对应着Content Provider的数据内容(关于URI的更详细部分,可参看文章最后)。

ContentResolver是通过URI来查询ContentProvider,ContentResolver采用的是类似数据库的操作(SQLite)来从Content providers中获取数据。


ContentResolver的主要接口方法,如下:(来自android 官方文档)


返回值 函数声明
final Uri insert(Uri url, ContentValues values)Inserts a row into a table at the given URL.
final int delete(Uri url, String where, String[] selectionArgs)Deletes row(s) specified by a content URI.
final Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)Query the given URI, returning a Cursor over the result set.
final int update(Uri uri, ContentValues values, String where, String[] selectionArgs)Update row(s) in a content URI.


要获取ContentResolver的话,可以调用getContentResolver ()方法,


a、例如下面演示query(查询)方法:

由上表可知query方法返回值为Cursor,代码如下


获得cursor (游标)(也可以用.managedQuery()方法来获取cursor,两者参数一样,区别是第二种方法可以管理Cursor的生命周期。

如Cursor cr = managedQuery(myPerson, null, null, null, null);)

那为什么要获取Cursor呢?因为通过query(查询)而得到的数据,要通过Cursor的方法来读取。(只是读取而已)

b、其他方法(注意返回值)

同样地,比如把android改名为apple。可调用ContenResolver.update()方法。

删除单个记录,调用ContentResolver.delete()方法,在参数中,指定到具体行即可。

如果是删除多个记录,调用ContentResolver.delete()方法,URI参数指定Content Provider即可,并带一个类似SQL的WHERE子句条件。


2.2、如何把一个应用程序的数据共享出去。

a、创建自己的Content provider(需要继承ContentProvider类)

b、如果这个应用程序的数据和已存在的Content provider数据结构是一致的,在获得该Content provider的“写”权限之后,

把数据写到已存在的Content provider中。






/********************************************附录**********************************/

1、URI的简介

通用资源标志符(Universal Resource Identifier, 简称"URI")。

Android上可用的每种资源 - 如图像、视频、通讯录、短信等等都可以用URI来表示。

URI也包括URL和和URN(为了便于理解,下面对比两者)

其中URL很容易理解,就是平常所说的网页地址。

众所周知,URL不仅可以标识特定网站,也可以标识这个网站某个特定网页。

同样地,URI不仅可以标识特定Content Provider,还可以标识这个应用程序的Content Provider中特定的数据库表。

这两者是类似的

关于三者更详细的对比,可参考此文章

http://www.eoeandroid.com/thread-526-1-1.html



2、URI的组成部分

一个完整的URI一般由4部分组成:

将其分为A,B,C,D


A:通用前缀"content://",用来说明一个Content Provider控制这些数据。

B:URI 的标识,它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的 类名。

这个标识在 元素的 authorities属性中说明:一般是定义该ContentProvider的包.类的名称 。

C:数据库中表的名字(如通讯录)

D:如果URI中包含表示需要获取的记录的ID;则就返回该ID对应的数据,如果没有ID,就表示返回全部;(如读取通讯录时,有ID表示某个联系人,没有ID表示整个通讯录)




Android系统提供了两个用于操作Uri的工具类,分别为UriMatcherContentUris


<wbr></wbr>

UriMatcher

UriMatcher 类主要用于匹配Uri.

<wbr></wbr>


ContentUris

ContentUris 类用于获取Uri路径后面的ID部分


分享到:
评论

相关推荐

    Android学习笔记(十)——实现新闻列表

    Android学习笔记(三)android studio中CheckBox自定义样式(更换复选框左侧的勾选图像) Android学习笔记(四)Android 中Activity页面的跳转及传值 Android学习笔记(五)——Toast提示、Dialog对话框、Menu菜单 ...

    Android学习笔记之——Content Providers

    之前博文《 Android学习笔记之——Android Studio的安装(3.6版本)、Java的基本语法及Android的概述 》曾经介绍过android有四大组件。本博文学习一下Content Providers(内容提供器) 目录 Android运行时 ...

    Android Training学习笔记——Navigation 参考源码

    在"Android Training学习笔记——Navigation 参考源码"中,作者可能详细解析了源码,展示了如何创建和配置Navigation Graph,以及如何在代码中使用`NavController`进行导航。可能还涵盖了如何调试和测试Navigation...

    第一行代码 android学习笔记 完整版

    本笔记对应的学习资源《第一行代码》是Android开发者的入门必读书籍,书中系统地介绍了Android的基本概念和开发技术。 一、Android系统架构 Android系统架构是Android开发的基础,系统架构包括Linux Kernel、...

    Android Training学习笔记——Navigation 参考源码(ListView版)

    这篇“Android Training学习笔记——Navigation 参考源码(ListView版)”深入探讨了如何使用Navigation构建一个基于ListView的导航系统。我们将从以下几个方面来详细讨论这个主题: 1. **Navigation组件简介** ...

    Android开发者学习笔记——View、Canvas、bitmap

    Android开发者学习笔记——View、Canvas、bitmap Android 开发者学习笔记——View、Canvas、bitmap 是 Android 开发中常用的类,本文将通过实例讲解 View、Canvas 等相关知识点。 从资源中获取位图 在 Android ...

    Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

    这篇“Android学习笔记——利用JNI技术在Android中调用、调试C++代码”将带你深入理解如何在Android应用中使用JNI来调用C++代码,以及如何进行调试。以下是对这一主题的详细阐述。 1. **JNI简介** JNI是Java平台的...

    Android学习笔记——Http通信 源码

    这篇"Android学习笔记——Http通信 源码"主要探讨了如何在Android应用中利用WebView控件加载网页以及使用ImageView控件加载网络图片,这两部分是Android应用与互联网交互的常见场景。 首先,我们来深入理解一下`...

    Android学习笔记——获取网络图片并显示

    在Android开发中,获取网络图片并显示是一项基本但至关重要的任务。这通常涉及到网络请求、图片处理和UI组件的交互。下面将详细讲解这个过程,包括XML布局、Java代码实现以及必要的权限设置。 首先,我们需要在XML...

    JAVA学习笔记————————

    3. **异常处理**:JAVA提供了一种结构化的异常处理机制,学习笔记会解释何时及如何使用try-catch-finally语句块,以及不同类型的异常类。 4. **内存管理与垃圾回收**:JAVA的自动内存管理是通过垃圾回收机制实现的...

    Android Training学习笔记——RecyclerView和CardView

    这篇“Android Training学习笔记”主要围绕这两个组件展开,旨在帮助开发者提升他们的Android应用设计能力。 RecyclerView是Android SDK提供的一种列表视图控件,取代了早期的ListView。RecyclerView的优势在于它的...

    【安卓项目】——新闻资讯类项目

    Android学习笔记(一)——创建第一个Android项目 ...Android学习笔记(十三)——数据存储(LitePal操作数据库) Android学习笔记(十四)——内容提供器 Android学习笔记(十五)——侧滑容器(ViewPager) ......

    Python 笔记源码——内含python后端&机器学习等.zip

    Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip ...

    狂神Java学习笔记————前端入门——html、css、JavaScript学习代码

    总的来说,这份【狂神Java学习笔记——前端入门——HTML、CSS、JavaScript学习代码】是一份全面且实用的学习资料,它涵盖了前端开发的三大核心技术,并结合了个人实践和理解,对于希望入门前端开发的学习者来说是一...

    Android四大组件(笔记+代码)

    在Android开发中,四大组件是构建应用程序的核心元素,它们分别是:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收者)以及ContentProvider(内容提供者)。本笔记将重点关注ContentProvider,它...

    免费 android 应用 源代码——记事本

    标题中的“免费 android 应用 源代码——记事本”表明这是一份关于Android应用开发的资源,特别是一个记事本应用的源代码。记事本应用是Android平台上常见的学习示例,它通常涉及到基础的用户界面设计、数据存储以及...

    学习笔记之——基于pytorch的FSRCNN

    学习笔记之——基于pytorch的FSRCNN 把我的代码上传了,后续有更正会更新这个代码

Global site tag (gtag.js) - Google Analytics