使用ContentProContentProvider共享生词本数据
自定义ContentProvider需要在项目清单中注册:
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.provider.UserDictionary.Words;
public class DictProvider extends ContentProvider{
private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
private static final int WORDS = 1;
private static final int WORD = 2;
private MyDatabaseHelper dbOpenHelper;
static{
//为UriMatcher注册两个Uri
matcher.addURI(mediaprovidertest.Words.AUTHORITY, "words", WORDS);
matcher.addURI(mediaprovidertest.Words.AUTHORITY, "word/#", WORD);
}
//第一次调用该DictProvider时,系统先创建DictProvider对象,并回调该方法
@Override
public boolean onCreate() {
dbOpenHelper = new MyDatabaseHelper(this.getContext(),"myDict.db3",null,1);
return true;
}
//查询数据的方法
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
switch (matcher.match(uri)) {
case WORDS:
//执行查询
return db.query("dict", projection,
selection, selectionArgs, null, null, sortOrder);
case WORD:
//解析出想查询的记录ID
long id = ContentUris.parseId(uri);
String where =mediaprovidertest.Words.Word._ID+"="+id;
//如果原来的where子句存在,拼接where子句
if(selection != null && "".equals(selection)){
where = where + " and "+selection;
}
return db.query("dict", projection, where, selectionArgs,
null, null, sortOrder);
default:
throw new IllegalArgumentException("未知Uri:"+uri);
}
}
//返回指定Uri参数对应的数据的MIME类型
@Override
public String getType(Uri uri) {
switch (matcher.match(uri)) {
//如果操作的数据是多项记录
case WORDS:
return "vnd.android.cursor.dir/org.crazyit.dict";
//如果操作的数据时单项记录
case WORD:
return "vnd.android.cursor.item/org.crazyit.dict";
default:
throw new IllegalArgumentException("未知Uri:"+uri);
}
}
//插入数据
@Override
public Uri insert(Uri uri, ContentValues values) {
// 获得数据库实例
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
//插入数据,返回行ID
long rowId = db.insert("dict", mediaprovidertest.Words.Word._ID, values);
//如果插入成功则返回uri
if(rowId>0){
//在已有的Uri的后面追加ID数据
Uri wordUri = ContentUris.withAppendedId(uri, rowId);
//通知数据已经改变
getContext().getContentResolver().notifyChange(wordUri, null);
return wordUri;
}
return null;
}
//删除数据的方法
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
//记录所删除的记录数
int num = 0;
//对Uri进行匹配
switch (matcher.match(uri)) {
case WORDS:
num = db.delete("dict", selection, selectionArgs);
break;
case WORD:
//解析出所需要删除的记录ID
long id = ContentUris.parseId(uri);
String where = mediaprovidertest.Words.Word._ID+"="+id;
//如果原来的where子句存在,拼接where子句
if(selection != null && selection.equals("")){
where = where +" and "+selection;
}
num = db.delete("dict", where, selectionArgs);
break;
default:
try {
throw new IllegalAccessException("未知Uri:"+uri);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
//通知数据已经改变
return num;
}
//修改数据的方法
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
SQLiteDatabase db = dbOpenHelper.getWriteDatabase();
//记录所修改的记录数
int num = 0;
switch (matcher.match(uri)) {
case WORDS:
num = db.update("dict", values, selection, selectionArgs);
break;
case WORD:
//解析出想修改的记录ID
long id = ContentUris.parseId(uri);
String where = mediaprovidertest.Words.Word._ID+"="+id;
//如果原来的where子句存在,拼接where子句
if(selection != null && selection.equals("")){
where = where +" and "+selection;
}
num = db.update("dict", values, where, selectionArgs);
default:
throw new IllegalArgumentException("未知Uri:"+uri);
}
//通知数据已经改变
getContext().getContentResolver().notifyChange(uri, null);
return 0;
}
}
使用ContentProContentProvider共享生词本数据的更多相关文章
- PHP 实现多网站共享用户SESSION 数据解决方案
PHP 实现多网站共享用户SESSION 数据解决方案 来源URL:http://blog.csdn.net/dongdongzzcs/article/details/6906613 一.问题起源 稍 ...
- 【Excle数据透视表】如何创建非共享缓存的数据透视表
一般情况下,利用同一个数据源创建多个数据表时,默认创建的是共享缓存的数据透视表.刷新一个数据透视表时会影响其他数据透视表的展示结果. 解决方案 创建非共享缓存的多个数据透视表 步骤一 单击工作表数据任 ...
- 5、docker容器数据卷: -v添加共享传递容器数据卷
1.是什么 1.docker理念 先来看看Docker的理念:* 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的* 容器之间希望有可能共享数据 2.保 ...
- 【CUDA 基础】5.2 共享内存的数据布局
title: [CUDA 基础]5.2 共享内存的数据布局 categories: - CUDA - Freshman tags: - 行主序 - 列主序 toc: true date: 2018-0 ...
- session共享原理以及PHP 实现多网站共享用户SESSION 数据解决方案
参考自: http://www.cnblogs.com/qulinke/articles/6003049.html https://segmentfault.com/q/101000000578847 ...
- 大数据freestyle: 共享单车轨迹数据助力城市合理规划自行车道
编者按:近年来,异军突起的共享单车极大地解决了人们共同面临的“最后一公里”难题,然而,共享单车发展迅猛,自行车道建设却始终没有能够跟上脚步.幸运的是摩拜单车大量的轨迹数据为我们提供了一种新的思路:利用 ...
- 011.Kubernetes使用共享存储持久化数据
本次实验是以前面的实验为基础,使用的是模拟使用kubernetes集群部署一个企业版的wordpress为实例进行研究学习,主要的过程如下: 1.mysql deployment部署, wordpre ...
- 在Owin Self-Hosing下实现每个请求中共享上下文(数据)
问题 这几天在做公司的外部WebApi网关,由于使用了OAuth2.0,所以不得不使用Owin来部署网关. 而涉及到请求上下文的问题,为了使业务层能获取到请求头的信息,又不与网关耦合,决定把请求信息写 ...
- Unity 3D Framework Designing(5)——ViewModel之间如何共享数据
对于客户端应用程序而言,单页应用程序(Single Page Application)是最常见的表现形式.有经验的开发人员往往会把一个View分解多个SubView.那么,如何在多个SubView之间 ...
随机推荐
- Codeforces Round #199 (Div. 2)
A.Xenia and Divisors 题意:给定N个数,每个数的取值范围为1-7,N是3的倍数,判定是否能够恰好将N个数分成若干三元组,使得一个组中的元素a,b,c满足 a < b < ...
- iOS - OC 内存管理
1.OC 基本内存管理模型 1.1 自动垃圾收集 在 OC 2.0 中,有一种称为垃圾收集的内存管理形式.通过垃圾收集,系统能够自动监测对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对 ...
- struts2 if正确标签示例
下面总结一下struts2 中if标签的使用 (1)判断字符串是否为空 <s:if test="user.username==null or user.username==''&quo ...
- STRUTS2 常用标签的使用
<body> <h1>s:if标签的用法</h1> <s:set name="price" value="25"> ...
- hibernate对象关系实现(二)一对一
双向一对一以部门和经理为例: a.部门和经理类中各自由对方的引用:(省略了get/set方法) b.数据库两种方式实现:一种(b.1)是外键映射,并将外键添加唯一约束(至于哪个对象的主键做外键,可随意 ...
- Android的启动模式(上)
1. 基本介绍 大家平时只要懂一点Android知识的话,都一定会知道,一个应用的组成,往往包含了许多的activity组件,每个activity都应该围绕用户的特定动作进行跳转设计.比如说,一个电话 ...
- jprofiler安装图解及破解码
原文:http://blog.csdn.net/lifuxiangcaohui/article/details/38677889 环境: 1.sun jdk1.6.0 2.jprofiler_wind ...
- 自定义MVC Html
自定义ASP.NET MVC Html辅助方法 在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我 ...
- map each 工具函数
工具函数 即全局性的函数作用主要是提供比如字符串,数组,对象等方面的遍历 字符串工具 $.trim(str) 去除字符串两边的空格 遍历机制 map函数(function (obj,index){ ...
- One Class SVM, SVDD(Support Vector Domain Description)(转)
今天给大家介绍一下one class classification以及用SVDD(support vector domain description)做one class classification ...