共享参数ContentProvider 类与数据库绑定,如何通过共享参数测试类,测试数据库的增删改查功能
2013-07-01 20:05
656 查看
Intent可以传一个对象
当两个界面之间跳转时,需要传递一个对象过去,是通过使用Bundle类,并且实体类需要serializable实现序列化,传递方法如下:
定义一个静态常量作为key值
public final static String SER_KEY="com.xiaoshu.worker";
Intent intent=new Intent();
intent.setClass(WorkerActivity.this,DisplayWorker.class);
Bundle bundle = new Bundle();
bundle.putSerializable(SER_KEY, worker);
intent.putExtras(bundle);
startActivity(intent);
在另一个界面,接收通过intent传递过来的对象。接收方法如下
Worker worker = (Worker) getIntent().getSerializableExtra(WorkerActivity.SER_KEY);
/**
* 1.建一个类MyProvide ,继承ContentProvider ,实现四个方法,需要注册。在activity中调用。
* 注册如下:
<provider android:name=".MyProvide" android:authorities="www.android1.com.cn"></provider>
*
* 2.通过一个监听按钮获得MyProvide 解析器在另一个MainActivity 中。
*ContentResolver resolver=MainActivity.this.getContentResolver();//监听时,获取共享数据,一个查询一个插入
*Uri uri=Uri.parse("content://www.android1.com.cn");//uri代表资源地址
*resolver.query(uri,null,null,null);查询
*ContentValues values=new ContentValues();//插入放一个对象进去,因为insert方法需要传一个values值。
*resolver.insert(uri,values);
*
*******************执行数据库的操作MainActivity ************************
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button) findViewById(R.id.sss_sss);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//获得内容解析对象resolver,通过这个对象,对数据库进行操作
ContentResolver resolver=MainActivity.this.getContentResolver();
Uri uri=Uri.parse("content://www.android1.com.cn");
resolver.query(uri, null, null, null, null);
ContentValues values=new ContentValues();
values.put("name", "zhaoshan");
resolver.insert(uri, 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;
}
}
*******************************************************************************
/*内提需要注册 <provider android:name=".MyProvide" android:authorities="www.android1.com.cn"></provider>
* 内容提供者和数据库绑定,其它程序不可记问本程序的数据库,但可以通过内容提代者访问数据库。
*/
public class MyProvide extends ContentProvider {
SQLiteDatabase db = null;
@Override
public boolean onCreate() {
// 实例化数据库
MyDBHelper helper = new MyDBHelper(this.getContext());
db = helper.getWritableDatabase();
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// 查询数据库,返回一个游标值。
return db.query("Users", projection, selection, selectionArgs, null,
null, sortOrder);
}
@Override
public Uri insert(Uri uri, ContentValues values) {
db.insert("Users", "_id", values);
return uri;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return db.delete("Users", selection, selectionArgs);
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
int s = db.update("Users", values, selection, selectionArgs);
return s;
}
@Override
public String getType(Uri uri) {
return null;
}
}
//*************创建数据库szt**************************
public class MyDBHelper extends SQLiteOpenHelper {
public MyDBHelper(Context context) {
super(context, "szt.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 创建一个数据表Users
db.execSQL("create table Users(_id integer primary key autoincrement,name text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
*******************************************************************************
/**测试其它应用程序的数据
* 首先知道其它程序的共享参数,这个是继承ContentProvider共享参数类的注册格式:
* <provider android:name=".MyProvide" android:authorities="www.android1.com.cn"></provider>
* 1.TestMyProvide测试类首先在资源文件中添加权限在Instrumentation-->add---->name--->android.test.InstrumentationTestRunner
* ---->Target package--->com.example.testprovider 包名
* 2. 注册测试资源文件
* <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.testprovider.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-library android:name="android.test.runner"/>//加入这个固定格式
</application>
*
*3.注册完后,本类,继承AndroidTestCase类,重写测试数据库的方法,方法名以test开头的。
* 在outline模式下,出现TestMyProvide类下的五个方法setUp();
* testInsert();
* testQuery();
* testdelete();
* testUpdate();
* 选中一个方法,点击右键--->Run As--->Android jUnit Test运行方法
* 在MyProvide类下,在data--date--包名--导出数据库后,查看数据库
*/
public class TestMyProvide extends AndroidTestCase {
ContentResolver resolver = null;
@Override
protected void setUp() throws Exception {
resolver = this.getContext().getContentResolver();
super.setUp();
}
public void testInsert(){
ContentValues values = new ContentValues();
values.put("name", "wangchenghua");
resolver.insert(Uri.parse("content://www.android1.com.cn"), values);
Log.i("msg", "wangchenghua");
}
public void testQuery(){
Cursor c = resolver.query(Uri.parse("content://www.android1.com.cn"), null, null, null, null);
while(c.moveToNext()){
Log.i("msg", c.getString(c.getColumnIndex("name")));
}
c.close();
}
public void testdelete(){
resolver.delete(Uri.parse("content://www.android1.com.cn"), "_id = ?", new String[]{String.valueOf(1)});
}
public void testUpdate(){
ContentValues values = new ContentValues();
values.put("name", "wangxiaoou");
resolver.update(Uri.parse("content://www.android1.com.cn"), values, "_id = ?", new String[]{String.valueOf(4)});
}
}
当两个界面之间跳转时,需要传递一个对象过去,是通过使用Bundle类,并且实体类需要serializable实现序列化,传递方法如下:
定义一个静态常量作为key值
public final static String SER_KEY="com.xiaoshu.worker";
Intent intent=new Intent();
intent.setClass(WorkerActivity.this,DisplayWorker.class);
Bundle bundle = new Bundle();
bundle.putSerializable(SER_KEY, worker);
intent.putExtras(bundle);
startActivity(intent);
在另一个界面,接收通过intent传递过来的对象。接收方法如下
Worker worker = (Worker) getIntent().getSerializableExtra(WorkerActivity.SER_KEY);
/**
* 1.建一个类MyProvide ,继承ContentProvider ,实现四个方法,需要注册。在activity中调用。
* 注册如下:
<provider android:name=".MyProvide" android:authorities="www.android1.com.cn"></provider>
*
* 2.通过一个监听按钮获得MyProvide 解析器在另一个MainActivity 中。
*ContentResolver resolver=MainActivity.this.getContentResolver();//监听时,获取共享数据,一个查询一个插入
*Uri uri=Uri.parse("content://www.android1.com.cn");//uri代表资源地址
*resolver.query(uri,null,null,null);查询
*ContentValues values=new ContentValues();//插入放一个对象进去,因为insert方法需要传一个values值。
*resolver.insert(uri,values);
*
*******************执行数据库的操作MainActivity ************************
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button) findViewById(R.id.sss_sss);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//获得内容解析对象resolver,通过这个对象,对数据库进行操作
ContentResolver resolver=MainActivity.this.getContentResolver();
Uri uri=Uri.parse("content://www.android1.com.cn");
resolver.query(uri, null, null, null, null);
ContentValues values=new ContentValues();
values.put("name", "zhaoshan");
resolver.insert(uri, 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;
}
}
*******************************************************************************
/*内提需要注册 <provider android:name=".MyProvide" android:authorities="www.android1.com.cn"></provider>
* 内容提供者和数据库绑定,其它程序不可记问本程序的数据库,但可以通过内容提代者访问数据库。
*/
public class MyProvide extends ContentProvider {
SQLiteDatabase db = null;
@Override
public boolean onCreate() {
// 实例化数据库
MyDBHelper helper = new MyDBHelper(this.getContext());
db = helper.getWritableDatabase();
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// 查询数据库,返回一个游标值。
return db.query("Users", projection, selection, selectionArgs, null,
null, sortOrder);
}
@Override
public Uri insert(Uri uri, ContentValues values) {
db.insert("Users", "_id", values);
return uri;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return db.delete("Users", selection, selectionArgs);
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
int s = db.update("Users", values, selection, selectionArgs);
return s;
}
@Override
public String getType(Uri uri) {
return null;
}
}
//*************创建数据库szt**************************
public class MyDBHelper extends SQLiteOpenHelper {
public MyDBHelper(Context context) {
super(context, "szt.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 创建一个数据表Users
db.execSQL("create table Users(_id integer primary key autoincrement,name text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
*******************************************************************************
/**测试其它应用程序的数据
* 首先知道其它程序的共享参数,这个是继承ContentProvider共享参数类的注册格式:
* <provider android:name=".MyProvide" android:authorities="www.android1.com.cn"></provider>
* 1.TestMyProvide测试类首先在资源文件中添加权限在Instrumentation-->add---->name--->android.test.InstrumentationTestRunner
* ---->Target package--->com.example.testprovider 包名
* 2. 注册测试资源文件
* <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.testprovider.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-library android:name="android.test.runner"/>//加入这个固定格式
</application>
*
*3.注册完后,本类,继承AndroidTestCase类,重写测试数据库的方法,方法名以test开头的。
* 在outline模式下,出现TestMyProvide类下的五个方法setUp();
* testInsert();
* testQuery();
* testdelete();
* testUpdate();
* 选中一个方法,点击右键--->Run As--->Android jUnit Test运行方法
* 在MyProvide类下,在data--date--包名--导出数据库后,查看数据库
*/
public class TestMyProvide extends AndroidTestCase {
ContentResolver resolver = null;
@Override
protected void setUp() throws Exception {
resolver = this.getContext().getContentResolver();
super.setUp();
}
public void testInsert(){
ContentValues values = new ContentValues();
values.put("name", "wangchenghua");
resolver.insert(Uri.parse("content://www.android1.com.cn"), values);
Log.i("msg", "wangchenghua");
}
public void testQuery(){
Cursor c = resolver.query(Uri.parse("content://www.android1.com.cn"), null, null, null, null);
while(c.moveToNext()){
Log.i("msg", c.getString(c.getColumnIndex("name")));
}
c.close();
}
public void testdelete(){
resolver.delete(Uri.parse("content://www.android1.com.cn"), "_id = ?", new String[]{String.valueOf(1)});
}
public void testUpdate(){
ContentValues values = new ContentValues();
values.put("name", "wangxiaoou");
resolver.update(Uri.parse("content://www.android1.com.cn"), values, "_id = ?", new String[]{String.valueOf(4)});
}
}
相关文章推荐
- 共享参数ContentProvider 类与数据库绑定,如何通过共享参数测试类,测试数据库的增删改查功能
- 通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界
- 如何通过配置来实现IP+MAC+端口绑定功能
- 如何通过java代码在数据库上增删改查?
- 如何通过cmd传自定义参数到测试apk中
- ORACLE 11G 中没有参数文件和控制文件如何通过rman恢复数据库
- 源码编译LAMP架构,phpMyadmin管理数据库,增加xcache加速功能,通过ab测试效果。
- 如何通过DHCP Snooping配置来实现IP+MAC+端口绑定功能
- 修改数据库参数,使其可以提供共享功能
- cxGrid 增加序号 (非数据库绑定模式) (测试通过)
- XCode 内置了 OCUnit 单元测试框架,但目前最好用的测试框架应该是 GHUnit。通过 GHUnit + OCMock 组合,我们可以在 iOS 下进行较强大的单元测试功能。本文将演示如何在
- Revit API 开发 (5): 如何得到所有的categories,创建共享参数,并把它们绑定在一起
- 通过数据库绑定的dropdownlist,如何让其第一条默认显示"--请选择--"
- 如何通过cmd传自定义参数到测试apk中
- 如何在postgresql中模拟oracle的dual表,来测试数据库最基本的连接功能?
- VS 2010 测试功能学习(20) - 建立手工测试用例参数和被测试程序控件的绑定
- SQL存储过程测试(7)——当待测存储过程返回out参数时 如何判断测试结果是否通过
- VS 2010 测试功能学习(20) - 建立手工测试用例参数和被测试程序控件的绑定(转)
- RevitAPI: 如何创建共享参数,并和类别绑定
- GridView的HyperLinkField的DataNavigateUrlFormatString如何使用自定义的变量,而不是数据库绑定的值.报错:指定的参数已超出有效值的范围。参数名: index