Android组件系列----ContentProvider内容提供者【4】
(4)单元測试类:
这里须要涉及到另外一个知识:ContentResolver内容訪问者。
要想訪问ContentProvider。则必须使用ContentResolver。
能够通过ContentResolver来操作ContentProvider所暴露处理的接口。一般使用Content.getContentResolver()方法获取ContentResolver对象。第一段中已经提到:ContentProvider有非常多对外能够訪问的方法,在ContentResolver中均有同名的方法,是一一相应的。
所以它也存在insert、query、update、delete等方法。于是单元測试类能够这样写:(注:单元測试假设不清楚。能够參考另外一篇文章:JUnit单元測试的使用)
MyTest.java:

1 package com.example.contentresolvertest;
2
3 import android.content.ContentResolver;
4 import android.content.ContentValues;
5 import android.database.Cursor;
6 import android.net.Uri;
7 import android.os.Bundle;
8 import android.test.AndroidTestCase;
9 import android.util.Log;
10
11 public class MyTest extends AndroidTestCase {
12
13 public MyTest() {
14 // TODO Auto-generated constructor stub
15
16 }
17
18 public void calltest() {
19 ContentResolver contentResolver = getContext().getContentResolver();
20 Uri uri = Uri
21 .parse("content://com.example.contentprovidertest01.PersonContentProvider/person");
22 Bundle bundle = contentResolver.call(uri, "method", null, null);
23 String returnCall = bundle.getString("returnCall");
24 Log.i("main", "-------------->" + returnCall);
25 }
26
27 //測试方法:向数据库中加入记录。假设之前没有数据库,则会自己主动创建
28 public void insert() {
29 // 使用内容解析者ContentResolver訪问内容提供者ContentProvider
30 ContentResolver contentResolver = getContext().getContentResolver();
31 ContentValues values = new ContentValues();
32 values.put("name", "生命贰号");
33 values.put("address", "湖北");
34 // content://authorities/person
35 // http://
36 Uri uri = Uri
37 .parse("content://com.example.contentprovidertest01.PersonContentProvider/person");
38 contentResolver.insert(uri, values);
39 }
40
41 //測试方法:删除单条记录。假设要删除全部记录:content://com.example.contentprovidertest01.PersonContentProvider/person
42 public void delete() {
43 ContentResolver contentResolver = getContext().getContentResolver();
44 Uri uri = Uri
45 .parse("content://com.example.contentprovidertest01.PersonContentProvider/person/2");//删除id为1的记录
46 contentResolver.delete(uri, null, null);
47 }
48
49 //測试方法:依据条件删除记录。
50 public void deletes() {
51 ContentResolver contentResolver = getContext().getContentResolver();
52 Uri uri = Uri
53 .parse("content://com.example.contentprovidertest01.PersonContentProvider/person");
54 String where = "address=?";
55 String[] where_args = { "HK" };
56 contentResolver.delete(uri, where, where_args); //第二个參数表示查询的条件"address=? ",第三个參数表示占位符中的详细内容
57 }
58
59 //方法:依据id改动记录。注:非常少有批量改动的情况。
60 public void update() {
61 ContentResolver contentResolver = getContext().getContentResolver();
62 Uri uri = Uri
63 .parse("content://com.example.contentprovidertest01.PersonContentProvider/person/2");
64 ContentValues values = new ContentValues();
65 values.put("name", "李四");
66 values.put("address", "上海");
67 contentResolver.update(uri, values, null, null);
68 }
69
70 //方法:依据条件来改动记录。
71 public void updates() {
72 ContentResolver contentResolver = getContext().getContentResolver();
73 Uri uri = Uri
74 .parse("content://com.example.contentprovidertest01.PersonContentProvider/person/student");
75 ContentValues values = new ContentValues();
76 values.put("name", "王五");
77 values.put("address", "深圳");
78 String where = "address=?";
79 String[] where_args = { "beijing" };
80 contentResolver.update(uri, values, where, where_args);
81 }
82
83 //測试方法:查询全部记录。假设要查询单条记录:content://com.example.contentprovidertest01.PersonContentProvider/person/1
84 public void query() {
85 ContentResolver contentResolver = getContext().getContentResolver();
86 Uri uri = Uri
87 .parse("content://com.example.contentprovidertest01.PersonContentProvider/person");
88 Cursor cursor = contentResolver.query(uri, null, null, null, null);
89 while (cursor.moveToNext()) {
90 Log.i("MyTest",
91 "--->>"
92 + cursor.getString(cursor.getColumnIndex("name")));
93 }
94 }
95
96 //測试方法:依据条件查询全部记录。
97 public void querys() {
98 ContentResolver contentResolver = getContext().getContentResolver();
99 Uri uri = Uri
100 .parse("content://com.example.contentprovidertest01.PersonContentProvider/person");
101 String where = "address=?";
102 String[] where_args = { "深圳" };
103 Cursor cursor = contentResolver.query(uri, null, where, where_args,
104 null);
105 while (cursor.moveToNext()) {
106 Log.i("main",
107 "-------------->"
108 + cursor.getString(cursor.getColumnIndex("name")));
109 }
110 }
111
112 }

既然ContetProvider实现的是跨应用訪问数据,那这个測试类Test.java就应该写在还有一个应用程序中才行。于是,我们新建另外一个project文件ContentResolverTest,在里面加入单元測试,里面的代码事实上和上方的Test.java的代码是一模一样的。
执行单元測试。依旧能在ContentResolverTest中实现对ContentProviderTest01中的CRUD.核心在于:使用应用1中的内容解析者ContentResolver訪问应用2中的内容提供者ContentProvider
如今执行ContentProviderTest01中的单元測试类:
1、执行insert()方法,实现插入操作。后台打印例如以下:

上图中红框部分表明,这个uri就是代表内容提供者中,person表中。id为1的数据。
此时,打开file Explorer,进行查看,发现确实多了个文件:

注意:假设SQLite中之前没有mydb.db这个数据库。当实现插入操作时,会自己主动创建mydb.db这个数据库,并自己主动创建person表(由于在PersonDao类中运行了getWritableDatabase()方法)。
如今将上图中的mydb.db导出。然后用SQLiteExpert软件打开,输入sql查询语句。就能够看到person表中的数据了:

假设再运行insert()方法,又会继续加入一条记录(id是自己主动增长的)。
Android组件系列----ContentProvider内容提供者【4】的更多相关文章
- Android组件系列----ContentProvider内容提供者
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android组件系列----ContentProvider内容提供者【1】
[正文] 一.ContentProvider简单介绍: ContentProvider内容提供者(四大组件之中的一个)主要用于在不同的应用程序之间实现数据共享的功能. ContentProvider能 ...
- Android组件系列----ContentProvider内容提供商【5】
2.执行query()方法,查询全部记录(眼下一共两条记录).后台输出效果例如以下: 经測试,其它方法也都是能够运行的. 事实证明,新建的另外一个project文件ContentResolverTes ...
- Android开发学习—— ContentProvider内容提供者
* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的数据库.把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用. Uri:包含一个具有一定格式的字符串的对 ...
- android 53 ContentProvider内容提供者
ContentProvider内容提供者:像是一个中间件一样,一个媒介一样,可以以标准的增删改差操作对手机的文件.数据库进行增删改差.通过ContentProvider查找sd卡的音频文件,可以提供标 ...
- android contentprovider内容提供者
contentprovider内容提供者:让其他app可以访问私有数据库(文件) 1.AndroidManifest.xml 配置provider <?xml version="1.0 ...
- contentProvider 内容提供者
http://blog.csdn.net/woshixuye/article/details/8280879 实例代码当数据需要在应用程序间共享时,我们就可以利用ContentProvider为数据定 ...
- contentProvider内容提供者
contentProvider内容提供者 15. 四 / android基础 / 没有评论 步骤 权限在application中注册 Source code <provider an ...
- Android 进阶11:进程通信之 ContentProvider 内容提供者
学习启舰大神,每篇文章写一句励志的话,与大家共勉. When you are content to be simply yourself and don't compare or compete, e ...
随机推荐
- Java语言编码规范 - Java语言编码规范(中文版)(http://doc.javanb.com/code-conventions-for-the-java-programming-language-zh/index.html)
目录 1 介绍 1.1 为什么要有编码规范 1.2 版权声明 2 文件名 2.1 文件后缀 2.2 常用文件名 3 文件组织 3.1 Java源文件 3.1.1 开头注释 3.1.2 包和引入语句 ...
- javaweb学习总结(十六)——JSP指令(转)
一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: pa ...
- net4:MultiView(view)行为中的commmandname与commmandargument,ListBox的使用及移动操作
原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- for循环创建对象
有时候奇怪的发现往list添加数据的时候,一直被最后一个元素覆盖,首先 ,我们得明白原理: 在new 一个对象的时候,对象的ID是唯一确定的:将对象add入list中时,放入list中的其实是对象的引 ...
- WebRTC编译详细介绍 (转)
WebRTC技术交流群:234795279 原文地址:http://blog.csdn.net/temotemo/article/details/7056581 WebRTC编译 本人环境: 操作 ...
- 20深入理解C指针之---程序的栈和堆
一.程序在内存中的存储分段: 程序段主要包括:code段.data段.内核段.堆段和栈段 1.code段: 1).存储程序汇编后程序指令 2).此段中的数据是只读的 3).不能用于存储变量,可以存储常 ...
- js-点击按钮页面滚动到顶部,底部,指定位置
之所以笔记一下这个,因为我在项目中经常用到. $('.scroll_top').click(function(){$('html,body').animate({scrollTop: '0px'}, ...
- Light oj 1085 - All Possible Increasing Subsequences (简单dp + 离散化 + BIT)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1085 题意: 问你有多少个上升子序列. 思路: dp[i]表示以第i个数结尾的 ...
- CDOJ_327 BerOS file system
原题地址:http://acm.uestc.edu.cn/#/problem/show/327 The new operating system BerOS has a nice feature. I ...
- linux的history命令设置
history的历史记录,同一个用户的各个会话,读取到的内容也是不一样的,原因是它读取的是shell会话缓存里的内容.只有当用户退出当前会话的时候,会话里的缓存内容才会写入~/.bash_histor ...