`

Android四大组件之ContentProvider(三)

 
阅读更多

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,查询不同的表。

   
     
 
 

      

 

  • 大小: 20.5 KB
  • 大小: 30.5 KB
分享到:
评论

相关推荐

    Android四大组件之ContentProvider(二)

    在Android应用开发中,四大组件是Activity、Service、...通过阅读《Android四大组件之ContentProvider(二)》这篇博客,开发者可以更深入地了解ContentProvider的工作原理和实践技巧,从而在实际项目中灵活运用。

    Android四大组件之ContentProvider:简单的通讯录查询和添加

    在Android系统中,四大组件是应用程序的核心组成部分,包括Activity、Service、BroadcastReceiver和ContentProvider。ContentProvider作为数据共享和交互的桥梁,使得不同应用之间能够安全地访问和操作私有数据。...

    Android四大组件ContentProvider

    在Android系统中,四大组件是Activity、Service、BroadcastReceiver以及我们关注的ContentProvider。ContentProvider是Android框架中用于数据共享和跨应用数据访问的核心组件。它允许一个应用程序将自己的数据暴露给...

    Android四大组件简述

    在"Android四大组件简述"这个项目中,你可以找到关于这些组件的示例代码和实践应用,通过学习和调试这些示例,可以更深入地理解四大组件的工作原理和使用方式。这将对提升你的Android开发技能大有裨益。

    Android四大组件之一ContentProvider自定义Sqlite共享,实现增删查改基本功能

    在Android开发中,ContentProvider是四大核心组件之一,它扮演着数据共享与访问的重要角色。ContentProvider使得应用程序间的数据共享成为可能,同时也为其他组件(如Activity、Service)提供了统一的接口来操作数据...

    Android四大核心组件之ContentProvider的简单用法以及报错解决

    之前在用到ContentProvider时也是在网上找的教程,但是按照那些做法不怎么全面,我是没有实现出来,并且对于报错也没有给出解释原因与解决办法,也是通过借鉴与自己摸索,将自己 的一点想法分享出来。包含 ...

    android四大组件详解

    在Android系统中,四大组件是构建应用程序的核心元素,它们分别是Activity、Service、BroadcastReceiver和Content Provider。这四个组件各自承担着不同的职责,共同构成了Android应用的骨架。 **Activity**是用户与...

    09_四大应用组件之ContentProvider.zip

    在Android开发中,四大应用组件是Activity、Service、BroadcastReceiver以及我们关注的ContentProvider。ContentProvider作为其中之一,扮演着数据共享和跨应用数据访问的重要角色。这篇教程将深入解析...

    四,android四大组件基础介绍及打电话,发短信简单应用 &单元测试

    在Android开发中,四大组件是构建应用程序的核心元素,它们分别是:Activity、Service、BroadcastReceiver以及ContentProvider。这四个组件各自承担着不同的职责,是Android系统交互的基础。 1. **Activity**: ...

    Android开发的四大组件

    在Android应用开发中,四大组件是构建应用程序的基础,它们分别是Activity、Service、BroadcastReceiver和ContentProvider,还有Intent作为组件间通信的重要桥梁。下面我们将逐一详细解释这些组件。 **Activity详解...

    android 四大组件图解 ppt形式展示

    在Android应用开发中,四大组件是其核心构造块,它们分别是Activity、Service、BroadcastReceiver以及ContentProvider。这个名为“Android 四大组件图解”的PPT文档为初学者提供了一个全面且直观的理解这些组件的...

    android 用ContentProvider操作文件

    1. ContentProvider概述:ContentProvider是Android四大组件之一,它的主要职责是管理应用内的数据并提供对外接口,让其他应用能够通过URI(统一资源标识符)来访问这些数据。这对于文件操作来说尤其有用,因为这样...

    android 来电拦截,手机黑名单的实现,涵盖Android四大组件,

    首先,让我们来看看Android四大组件: 1. **活动(Activity)**:这是用户与应用交互的主要接口,通常用于显示UI。在来电拦截的场景中,活动可能用于设置黑名单,展示拦截规则或者处理用户的相关操作。 2. **服务...

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

    在Android开发中,四大组件是构建应用...以上就是关于Android四大组件中的ContentProvider和SharedPreferences的基本使用,以及如何插入短信的相关知识。理解并熟练掌握这些内容,对于进行Android应用开发至关重要。

    Android应用开发使用ContentProvider以及SQLite实现对数据库的相关操作

    接下来,ContentProvider是Android四大组件之一,它提供了一种标准接口,使得其他应用程序可以访问和修改由ContentProvider管理的数据,无论这些数据是存储在SQLite数据库、文件系统还是网络中。要创建一个...

    Android 四大组件详解(一) Activity 提到的demo

    在Android应用开发中,四大组件是应用程序的核心组成部分,它们包括Activity、Service、BroadcastReceiver和ContentProvider。本篇文章将重点解析Activity,尤其是其启动模式。Activity是用户与应用程序交互的窗口,...

    Android 之 自定义ContentProvider的使用

    在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享和跨应用数据访问的角色。自定义ContentProvider允许开发者创建自己的数据存储解决方案,并与其他应用程序无缝交互。这篇博客将深入探讨如何在...

Global site tag (gtag.js) - Google Analytics