android 学习笔记12-内容提供者.docx

上传人:A*** 文档编号:142724674 上传时间:2020-08-22 格式:DOCX 页数:10 大小:14.53KB
返回 下载 相关 举报
android 学习笔记12-内容提供者.docx_第1页
第1页 / 共10页
android 学习笔记12-内容提供者.docx_第2页
第2页 / 共10页
android 学习笔记12-内容提供者.docx_第3页
第3页 / 共10页
android 学习笔记12-内容提供者.docx_第4页
第4页 / 共10页
android 学习笔记12-内容提供者.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《android 学习笔记12-内容提供者.docx》由会员分享,可在线阅读,更多相关《android 学习笔记12-内容提供者.docx(10页珍藏版)》请在金锄头文库上搜索。

1、android 学习笔记12-内容提供者1、内容提供者实际的开发中,一般也比较少开发自定义的内容提供者,一般都是使用应用的数据库是不允许其他应用访问的内容提供者的作用就是让别的应用访问到你的私有数据,就是一个java类自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数据库的代码,举例增方法使用内容提供者可以自己定义访问规则,选择私有数据中哪些共享出去,哪些不共享注意(特别重要):我们一定要认真配置清单文件xml代码演示:a,内容提供者的xml文件配置 b,内容提供者定义: public class PersonProvider extends Con

2、tentProvider /继承ContentProvider,重写里面的方法 private SQLiteDatabase db; /内容提供者创建时调用 Override public boolean onCreate() MyOpenHelper oh = new MyOpenHelper(getContext(); db = oh.getWritableDatabase(); return false; /values:其他应用要插的数据 Override public Uri insert(Uri uri, ContentValues values) /插入 db.insert(pe

3、rson, null, values);/这里的values是调用者传进来的数据,因为我们内容提供者自己肯定不会去插数据的 return uri; Override public int delete(Uri uri, String selection, String selectionArgs) /删除 int i = 0; i = db.delete(person, selection, selectionArgs); return i; Override public int update(Uri uri, ContentValues values, String selection,

4、String selectionArgs) /修改 int i = db.update(person, values, selection, selectionArgs); return i; Override public Cursor query(Uri uri, String projection, String selection, String selectionArgs, String sortOrder) /查询 Cursor cursor = null; cursor = db.query(person, projection, selection, selectionArgs

5、, null, null, sortOrder, null); return cursor; c,我们访问者定义 public class MainActivity extends Activity Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); public void insert(View v) /通过内容提供者把数据插入01数据库 /1.获取contentResolv

6、er ContentResolver resolver = getContentResolver(); /2.访问内容提供者,插入数据 ContentValues values = new ContentValues(); values.put(name, 张三); values.put(phone, 123456); values.put(money, 10000); /arg0:指定内容提供者的主机名 resolver.insert(Uri.parse(content:/com.example.people), values); values.clear(); values.put(nam

7、e, 李四); values.put(phone, 12345); /arg0:指定内容提供者的主机名 resolver.insert(Uri.parse(content:/com.example.people), values); public void delete(View v) ContentResolver resolver = getContentResolver(); int i = resolver.delete(Uri.parse(content:/com.example.people), name = ?, new String张三); System.out.println

8、(i); public void update(View v) ContentResolver resolver = getContentResolver(); ContentValues values = new ContentValues(); values.put(money, 10001); int i = resolver.update(Uri.parse(content:/com.example.people), values, name = ?, new String张三); System.out.println(i);/更新的记录数 public void query(View

9、 v) ContentResolver resolver = getContentResolver(); Cursor cursor = resolver.query(Uri.parse(content:/com.example.people), null, null, null, null); while(cursor.moveToNext() String name = cursor.getString(1); String phone = cursor.getString(2); String money = cursor.getString(3); System.out.println

10、(name + ; + phone + ; + money); 这样大体的定义和访问就可以实现了,但是还有一些问题2、内容提供者-优化我们发现上面的内容提供者里面的表名都是写死的 db.insert(person, null, values);如果我们现在有个handsome表,想操作它就不行了我们要操作那张表就把表名放到uri里面传过去就行了 resolver.insert(Uri.parse(content:/com.example.people/person), values);那在提供者就去判断下是哪张表,我们可以使用一个API UriMatcher在内容提供者里面添加: /创建uri

11、匹配器 UriMatcher um = new UriMatcher(UriMatcher.NO_MATCH);/UriMatcher.NO_MATCH -1 , 如果都不匹配的话就返回-1 /添加匹配规则 /arg0:主机名 /arg1:路径 /arg2:匹配码,这个是自己定义的,如果匹配成功了,就返回这个匹配码 um.addURI(com.example.people, person, 1);/content:/com.example.people/person um.addURI(com.example.people, handsome, 2);/content:/com.example.people/handsome um.addURI(com.example.people, person/#, 3);/content:/com.example.people/person/10

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号