Android中的uri有些类似网络上常用的url地址。
scheme://host/path
1、scheme:协议:Android规定,在数据共享操作时,协议名必须是content。
2、host -主机名:唯一的标识ContentProvider的ID,该ID值在Android中是唯一的。
这个值就是AndroidManifest.xml中 authorities的属性值
3、路径(或称资源索引值):通过索引值找到指定的资源。
Content://com.example.provider.test/person
注意:ContentProvider主要提供对数据库的操作,但也允许操作文本文件、XML文件等
因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。掌握它们的使用,会便于我们的开发工作。
UriMatcher
1、UriMatcher(int code)
构造方法,传入的匹配码是使用match()方法匹配根路径时返回的值,这个匹配码可以为一个大于零的数表示匹配根路径或传入-1。
UriMatcher uriMatcher = new UriMathcer(UriMatcher.NO_MATCH);
2、UriMatcher.NO_MATCH
表示不匹配任何路径的返回码,值为-1
3、uriMatcher.addURI(String strUri);
作用:添加需要匹配的Uri
示例:uriMathcer.addURI("com.example.provider.test","person","1");
说明:
param1:传入标识ContentProvider的AUTHORITY字符串
param2:传入需要匹配的路径,这里的#代表匹配任意数字,另外还可以用*来匹配任意文本。
param3:必须传入一个大于零的匹配码,用于match()方法对相匹配的URI返回相对应的匹配码。
4、uriMatcher.match(uri);
作用:对Uri进行匹配,如果匹配就返回匹配码,匹配码是调用addURI()方法的param3.
示例:
Uri uri = Uri.parse("content://com.example.provider.test/person");
int code = uriMatcher.match(uri);
因为3中示例addURI()中的匹配码是1,所以这里返回的是code=1;
若不匹配,则返回值为-1.
ContentUris:用于获取Uri路径后面的ID部分,它有两个比较实用的方法:
withAppendedId(uri, id); 用于为路径加上ID部分
parseId(uri); 方法用于从路径中获取ID部分
下面通过演示ContentProviider访问多个共享表来说明UriMatcher的用法
步骤1、在项目中创建MySQLiteHelper类,用于创建本案例的库和表(表有person,student两张)。
步骤2、
a、创建MyProvider类,extends ContentProvider.
b、提供增删改查
c、创建一个UriMatcher常量,提供两个常量用来表示person和student表
代码如下:
public class MyProvider extends ContentProvider { // 创建UriMatcher对象,该对象是个常量 。默认不匹配任何URI public static final UriMatcher URI_MATCHER = new UriMatcher( UriMatcher.NO_MATCH); // 创建uri中host部分的字符串,该值确保与其他uri地址不同 public static final String AUTHORITY = "com.example.myProvider.test"; public static final int PERSON = 1; // person表的匹配码 public static final int STUDENT = 2;// student表的匹配码 // 为UriMatcher调价两个匹配的uri匹配码 static { URI_MATCHER.addURI(AUTHORITY, "person", PERSON); URI_MATCHER.addURI(AUTHORITY, "student", STUDENT); } MySQLiteOpenHelper mSQLiteOpenHelper; //----------------------------只展示了关键代码----------------------- @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase db = mSQLiteOpenHelper.getReadableDatabase(); String tableName = ""; // uri = Uri.parse("content://com.example.myProvider.test/person"); //对Uri进行匹配,如果匹配就返回匹配码 switch (URI_MATCHER.match(uri)) { case PERSON: tableName = Persons.TABLE_PERSON_NAME; break; case STUDENT: tableName = Persons.TABLE_STUDENT_NAME; break; } Cursor cursor = db.query(tableName, projection, selection, selectionArgs, null, null, sortOrder); return cursor; } }
结果如下:点击不同的Button,查询不同的表。
相关推荐
在Android应用开发中,四大组件是Activity、Service、...通过阅读《Android四大组件之ContentProvider(二)》这篇博客,开发者可以更深入地了解ContentProvider的工作原理和实践技巧,从而在实际项目中灵活运用。
在Android系统中,四大组件是应用程序的核心组成部分,包括Activity、Service、BroadcastReceiver和ContentProvider。ContentProvider作为数据共享和交互的桥梁,使得不同应用之间能够安全地访问和操作私有数据。...
在Android系统中,四大组件是Activity、Service、BroadcastReceiver以及我们关注的ContentProvider。ContentProvider是Android框架中用于数据共享和跨应用数据访问的核心组件。它允许一个应用程序将自己的数据暴露给...
在"Android四大组件简述"这个项目中,你可以找到关于这些组件的示例代码和实践应用,通过学习和调试这些示例,可以更深入地理解四大组件的工作原理和使用方式。这将对提升你的Android开发技能大有裨益。
在Android开发中,ContentProvider是四大核心组件之一,它扮演着数据共享与访问的重要角色。ContentProvider使得应用程序间的数据共享成为可能,同时也为其他组件(如Activity、Service)提供了统一的接口来操作数据...
之前在用到ContentProvider时也是在网上找的教程,但是按照那些做法不怎么全面,我是没有实现出来,并且对于报错也没有给出解释原因与解决办法,也是通过借鉴与自己摸索,将自己 的一点想法分享出来。包含 ...
在Android系统中,四大组件是构建应用程序的核心元素,它们分别是Activity、Service、BroadcastReceiver和Content Provider。这四个组件各自承担着不同的职责,共同构成了Android应用的骨架。 **Activity**是用户与...
在Android开发中,四大应用组件是Activity、Service、BroadcastReceiver以及我们关注的ContentProvider。ContentProvider作为其中之一,扮演着数据共享和跨应用数据访问的重要角色。这篇教程将深入解析...
在Android开发中,四大组件是构建应用程序的核心元素,它们分别是:Activity、Service、BroadcastReceiver以及ContentProvider。这四个组件各自承担着不同的职责,是Android系统交互的基础。 1. **Activity**: ...
在Android应用开发中,四大组件是构建应用程序的基础,它们分别是Activity、Service、BroadcastReceiver和ContentProvider,还有Intent作为组件间通信的重要桥梁。下面我们将逐一详细解释这些组件。 **Activity详解...
在Android应用开发中,四大组件是其核心构造块,它们分别是Activity、Service、BroadcastReceiver以及ContentProvider。这个名为“Android 四大组件图解”的PPT文档为初学者提供了一个全面且直观的理解这些组件的...
1. ContentProvider概述:ContentProvider是Android四大组件之一,它的主要职责是管理应用内的数据并提供对外接口,让其他应用能够通过URI(统一资源标识符)来访问这些数据。这对于文件操作来说尤其有用,因为这样...
首先,让我们来看看Android四大组件: 1. **活动(Activity)**:这是用户与应用交互的主要接口,通常用于显示UI。在来电拦截的场景中,活动可能用于设置黑名单,展示拦截规则或者处理用户的相关操作。 2. **服务...
在Android开发中,四大组件是构建应用...以上就是关于Android四大组件中的ContentProvider和SharedPreferences的基本使用,以及如何插入短信的相关知识。理解并熟练掌握这些内容,对于进行Android应用开发至关重要。
接下来,ContentProvider是Android四大组件之一,它提供了一种标准接口,使得其他应用程序可以访问和修改由ContentProvider管理的数据,无论这些数据是存储在SQLite数据库、文件系统还是网络中。要创建一个...
在Android应用开发中,四大组件是应用程序的核心组成部分,它们包括Activity、Service、BroadcastReceiver和ContentProvider。本篇文章将重点解析Activity,尤其是其启动模式。Activity是用户与应用程序交互的窗口,...
在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享和跨应用数据访问的角色。自定义ContentProvider允许开发者创建自己的数据存储解决方案,并与其他应用程序无缝交互。这篇博客将深入探讨如何在...