android数据的存储方式大体上来书有四种:SharedPreferences,File,SQLite,ContentProvider
做了个ContentProvider的demo
ContentProvider翻译成中文是内容提供者,肯定有提供方和调用方。
数据提供方的实现:
流程:分为两步
(1) 编写一个类继承自ContentProvider类,会有很多方法可以实现,根据具体需求选择自己要实现的
public class MyContentProvider extends ContentProvider {
private static UriMatcher matcher;
//请求唯一标示
private static final String CONNPATH = "com.mycontentprovider";
private static final int ALL_WORD = 1;
private static final int PAGE_WORD = 2;
private static final String DATABASE_ALL = "all";
private static final String DATABASE_PAGE = "page";
private SQLiteDatabase database;
static{
//出事换UriMatcher
matcher = new UriMatcher(UriMatcher.NO_MATCH);
matcher.addURI(CONNPATH, DATABASE_ALL, ALL_WORD);
matcher.addURI(CONNPATH, DATABASE_PAGE, PAGE_WORD);
}
@Override
public int delete(Uri arg0, String arg1, String[] arg2) {
// TODO Auto-generated method stub
return 0;
}
@Override
public String getType(Uri arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Uri insert(Uri arg0, ContentValues arg1) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean onCreate() {
//得到SqliteDatabase
database = DBHelper.getInstance().openDatabase();
return true;
}
@Override
public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,
String arg4) {
Cursor cursor = null;
switch (matcher.match(arg0)) {
case ALL_WORD:
cursor = database.query("tb_test",arg1, null,null, null,null,arg4);
break;
case PAGE_WORD:
int pageCount =Integer.valueOf(arg3[0]);
Log.d("debug","var2="+pageCount);
int pageSize =Integer.valueOf(arg3[1]);
Log.d("debug","var1="+pageSize);
String sqlStr = "select id,name,sex from tb_test limit ?,?";
// 从limit 10,100 表示表示从11条记录开始的100条记录
cursor = database.rawQuery(sqlStr,
new String[] { String.valueOf((pageCount - 1) * pageSize),
String.valueOf(pageSize) });
break;
default:
break;
}
return cursor;
}
@Override
public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
// TODO Auto-generated method stub
return 0;
}
}
(2) 在AndroidManifest.xml 中的<application>节点下添加<provider>节点,注册路径和请求uri
<provider android:name="MyContentProvider" android:authorities="com.mycontentprovider" ></provider>
调用方:
一步就可以了
Activity实例对象的getContentResolver()方法得到ContentResolver对象就可以进行增删改查了
//请求Url
String connPath = "content://com.mycontentprovider";
//与数据提供方UriMatcher 添加的tag对应
//查找所有
String all = connPath+"/all";
Cursor cursor = getContentResolver().query(Uri.parse(all), new String[]{"id","name","sex"}, null, null, "id");
由调用方可以知道,最终请求的地址是: "content://com.mycontentprovider/all";
这个请求的可以分为三部分
(1)协议:content 谷歌规定的
(2)唯一标识:com.mycontentprovider 在android系统实例中必须唯一,与数据提供方注册是的uri一致
(3)请求数据的tag,与 数据提供方的UriMatcher添加的tag一致
分享到:
相关推荐
android 内容提供者 安卓 初级 老鸟勿入
Android 内容提供者、解释者和观察者小例子 两个个程序源码
android 内容提供者 ContentProvider
android内容提供者获取通讯录,获取短信。
Android项目实战--手机卫士26--内容提供者与内容观察者
简单Android中的内容提供者实例,带数据库操作。
Android通过内容提供者读取联系人,手机上必须要有联系人数据,也可以直接在真机上运行
NULL 博文链接:https://justsee.iteye.com/blog/936612
本文实例讲述了Android内容提供者ContentProvider用法。分享给大家供大家参考,具体如下: PersonContentProvider内容提供者类 package com.ljq.db; import android.content.ContentProvider; import android....
使用android通讯录中的内容提供者,实现查询和增加联系人。经测试,可用
android的内容提供者contentprovider的应用, 采用ContentProvider对外共享数据和监听ContentProvider中数据的变化
ContentProvider(内容提供者)主要用于跨项目访问(操作)数据。 这个项目就是自定义内容提供者,供别的项目访问。
该资源包含两个工程,一个是ContentProvider的Demo资源,另一个是ContentResolver的Demo资源。本资源旨在为入门者提供一个完整的事例。
自定义内容提供者,和调用系统联系人 ,android
NULL 博文链接:https://2528.iteye.com/blog/1062079
这个demo详细介绍了ContentProvider内容提供者的用法,详细介ContentProvider怎么进行数据处理,等一下用法,代码有注释,简明易懂