UriMatcher uri选择器

选择器是为了让其他应用把传递进来的uri进行分类,来确定要操作哪个表,

首先要声明UriMatcher

static UriMatcher um = new UriMatcher(UriMatcher.NO_MATCH);参数固定

然后在静态块里进行匹配规则的说明

// 在块里确定匹配规则,
// 第一个参数为主机名,之后是表名,之后是结果码,一般1开始
um.addURI("com.hello.demo", "people", 1);
um.addURI("com.hello.demo", "teacher", 2);

//路径后带数字匹配
um.addURI("com.hello.demo", "people/#", 3);
//路径后带字符的匹配
um.addURI("com.hello.demo", "people/*", 4);

然后在增啥改查里开始对uri进行分类

@Override
public Uri insert(Uri uri, ContentValues values) {
//uri选择器进行选择,返回结果码
switch (um.match(uri)) {
case 1:
db.insert("people", null, values);
break;
case 2:
db.insert("teacher", null, values);
break;

default:
break;
}

return uri;
}

然后其他应用程序要通过uri调用的时候必须加上匹配规则,否则返回值为-1就匹配不到了

findViewById(R.id.insert_btn).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put("name", "tom");
values.put("sex", "m");
cr.insert(Uri.parse("content://com.hello.demo/people"), values);

}
});
findViewById(R.id.delete_btn).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put("name", "jim");
cr.insert(Uri.parse("content://com.hello.demo/teacher"), values);

}
});

package com.neusoft.demo;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;

public class MyContentProvider extends ContentProvider {
    SQLiteOpenHelper oh;
    SQLiteDatabase db;
     // uri选择器,如果这个数据库中有超过两个表的时候我们就要用uri选择器来确定别的
    // 应用程序要操作的是哪个数据库
    static UriMatcher um = new UriMatcher(UriMatcher.NO_MATCH);
    static {
        // 在块里确定匹配规则,
        // 第一个参数为主机名,之后是表情,之后是结果码,一般1开始
        um.addURI("com.hello.demo", "people", 1);
        um.addURI("com.hello.demo", "teacher", 2);      

      //路径后带数字匹配
      um.addURI("com.hello.demo", "people/#", 3);
      //路径后带字符的匹配
      um.addURI("com.hello.demo", "people/*", 4);

    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return db.delete("people", selection, selectionArgs);
    }

    @Override
    public String getType(Uri uri) {
        // TODO: Implement this to handle requests for the MIME type of the data
        // at the given URI.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        //uri选择器进行选择,返回结果码
        switch (um.match(uri)) {
        case 1:
            db.insert("people", null, values);
            break;
        case 2:
            db.insert("teacher", null, values);
            break;

        default:
            break;
        }

        return uri;
    }

    @Override
    public boolean onCreate() {
        oh = new MyOpenHelp(getContext());
        db = oh.getWritableDatabase();
        return false;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        Cursor cu = db.query("people", projection, selection, selectionArgs,
                null, null, sortOrder);
        return cu;
    }

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

其他应用程序调用

package com.example.contentprovider2;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.insert_btn).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                ContentResolver cr = getContentResolver();
                ContentValues values = new ContentValues();
                values.put("name", "tom");
                values.put("sex", "m");
                cr.insert(Uri.parse("content://com.hello.demo/people"), values);

            }
        });
        findViewById(R.id.delete_btn).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                ContentResolver cr = getContentResolver();
                ContentValues values = new ContentValues();
                values.put("name", "jim");
                cr.insert(Uri.parse("content://com.hello.demo/teacher"), values);

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
时间: 2024-11-08 13:20:58

UriMatcher uri选择器的相关文章

Android10_内容提供者_内容观察者_标题栏

安卓四大组件Activity ,Service,BroadCastReceiver,ContentProvider(内容提供者) 1.1内容提供者的作用: 应用程序创建的数据库默认都是私有的,别的应用程序不可以访问里面的数据,如果有需求把自己应用程序私有的数据库暴露给别的用户增删改查,就需要使用内容提供者. 1.2 内容提供者的代码实现 在需要提供给它人数据的应用中 ①创建一个项目,并且创建数据库(数据库开启帮助类)(非必要) ②创建一个类,继承ContentProvider内容提供者, 内容提

Android Uri、UriMatcher、ContentUris详解

1.Uri 通用资源标志符(Universal Resource Identifier, 简称"URI"). Uri代表要操作的数据,Android上可用的每种资源 - 图像.视频片段等都可以用Uri来表示. URI一般由三部分组成: 访问资源的命名机制. 存放资源的主机名. 资源自身的名称,由路径表示. Android的Uri由以下三部分组成: "content://".数据的路径.标示ID(可选) 举些例子,如: 所有联系人的Uri: content://con

jQuery中的选择器

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD

手册的选择器部分

1,#id   $("#div"); 查找html标签中id为div的元素 <div id="div"></div> 2,element $("div");   查找标签中 元素为div的所有元素 <div>1</div> <div>1</div> <p>1</p> 3,.class $(".a"); 查找标签中class为a的所有

Android图片选择器

1.概述 应公司项目需求,要做一个图片选择器,网上搜索了一些源码,我在别人的基础上进行了修改,另外页面也进行了重整,我的是先加载图片文件夹列表,然后再进入选择图片.           参考博客地址:http://blog.csdn.net/lmj623565791/article/details/39943731           修改bug:可以扫描gif文件,并且后缀名是大写的也可以扫描出来 例如:image.GIF 效果图如下: 2.扫描图片文件夹的核心代码,就是开启一个线程去扫描数据

爬虫:Scrapy5 - 选择器Selectors

当抓取网页时,常见的任务是从HTML源码中提取数据.现有的一些库可以达到这个目的: BeautifulSoup lxml Scrapy 提取数据有自己的一套机制.它们被称作选择器(seletors),因为他们通过特定的 XPath 或者 CSS 表达式来"选择" HTML 文件中的某个部分. 构造选择器 Scrapy selector 是以 文字(Text)或 TextResponse 构造的 Selector.其根据输入类型自动选择最优的分析方法(XML vs HTML): >

JQ选择器...

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JQ选择器</title> <style type="text/css"> .focused{ background:#abcdef; } </style> </head> <body> &

转:jquery选择器总结

原文地址:http://www.cnblogs.com/onlys/articles/jQuery.html jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法 $("#myELement")    选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 $("div")           选择所有的div标签元素,返回div元素数组 $(".myClass&quo

CSS选择器详细总结

一.基本选择器 序号 选择器 含义 1. * 通用元素选择器,匹配任何元素 2. E 标签选择器,匹配所有使用E标签的元素 3. .info class选择器,匹配所有class属性中包含info的元素 4. #footer id选择器,匹配所有id属性等于footer的元素 实例: * { margin:0; padding:0; } p { font-size:2em; } .info { background:#ff0; } p.info { background:#ff0; } p.in