ch023 Android ContentProvider(第一部分,单元测试)

--------------------------------------------AndroidManifest.xml----------------------------------

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.ch23"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="15" />

    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <!-- 单元测试包-->

        <uses-library android:name="android.test.runner"/>

        <activity

            android:name=".MainActivity"

            android:label="@string/title_activity_main" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <!-- 注册ContentProvider -->

        <provider android:name=".provider.MyProvider" android:authorities="com.ch23.provider.myprovider"></provider>

    </application>

    <!-- 单元测试声明 -->

    <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.ch23"></instrumentation>

</manifest>

--------------------------------------------Layout activity_main.xml-----------------------------

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/LinearLayout1"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

</LinearLayout>

--------------------------------------------Activity MainActivity.java-----------------------------

package com.ch23;

import android.app.Activity;

import android.os.Bundle;

public class MainActivity extends Activity {

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }

}

--------------------------------------------DB目录 Const.java-----------------------------------

package com.ch23.db;

/*常量类*/

public class Const {

public final static String CONTENTPROVIDER = "com.ch23.provider.myprovider";

/* Uri C ,代表返回多条数据 */

public final static int STU_LIST = 1;

/* Uri D*,代表返回一条数据 */

public final static int STU_DETAIL = 2;

}

--------------------------------------------DB目录 DBHelper.java-------------------------------

package com.ch23.db;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

/**

 * 

 * 项目名称:com.ch23    

 * 类名称:DBHelper    

 * 类描述:数据库操作工具类  

 * 创建人:方勇   

 * 创建时间:2012-12-10 下午8:25:47   

 * Copyright (c) 方勇-版权所有

 */

public class DBHelper {

private static DatabaseHelper databaseHelper;// 数据库定义语言,创建数据库,DDL,定义数据结构

private static SQLiteDatabase db;// 数据库操作对象,DML,数据库操作

private String DATABASE_NAME = "a07.db";

private int DATABASE_VERSION = 1;// 数据库版本,必须赋值

private Context context;// 定义一个上下文对象

/* 构造方法 */

public DBHelper(Context context) {

this.context = context;

}

/* 打开数据库的方法 */

public DBHelper open() {

databaseHelper = new DatabaseHelper(context);

db = databaseHelper.getWritableDatabase();

return this;

}

// 关闭数据库

public void close() {

db.close();

databaseHelper.close();

}

/* 插入数据 */

public long insert(String tableName, ContentValues values) {

return db.insert(tableName, null, values);

}

/* 删除数据 */

public boolean delete(String tableName, String whereClause,

String[] whereArgs) {

return db.delete(tableName, whereClause, whereArgs) > 0;

}

/* 更新数据 */

public boolean update(String tableName, ContentValues values,

String whereClause, String[] whereArgs) {

return db.update(tableName, values, whereClause, whereArgs) > 0;

}

/* 取得一个列表 */

public Cursor findList(String tableName, String[] columns,

String selection, String[] selectionArgs, String groupBy,

String having, String OrderBy) {

return db.query(tableName, columns, selection, selectionArgs, groupBy,

having, OrderBy);

}

/* 取得单行记录 */

public Cursor findInfo(String tableName, String[] columns,

String selection, String[] selectionArgs, String groupBy,

String having, String orderBy) {

Cursor cursor = db.query(tableName, columns, selection, selectionArgs,

groupBy, having, orderBy);

while (cursor.moveToNext()) {

cursor.moveToFirst();

}

return cursor;

}

/* 执行sql语句 */

public void executeSql(String sql) {

db.execSQL(sql);

}

/* SQLiteopenHelper是一个抽象类,来管理数据库的创建和版本的管理 */

private class DatabaseHelper extends SQLiteOpenHelper {

public DatabaseHelper(Context context) {

super(context, DATABASE_NAMEnullDATABASE_VERSION);

}

// 创建表结构

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL("create table if not exists stu(id integer primary key,name text)");

db.execSQL("insert into stu values(1,'a1')");

db.execSQL("insert into stu values(2,'a2')");

db.execSQL("insert into stu values(3,'a3')");

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

}

--------------------------------------------provider目录 MyProvider.java-----------------------

package com.ch23.provider;

import com.ch23.db.Const;

import com.ch23.db.DBHelper;

import android.content.ContentProvider;

import android.content.ContentUris;

import android.content.ContentValues;

import android.content.UriMatcher;

import android.database.Cursor;

import android.net.Uri;

/**

 * 

 * 项目名称:com.ch23    

 * 类名称:MyProvider    

 * 类描述:对外应用程序提供数据  

 * 创建人:方勇   

 * 创建时间:2012-12-10 下午8:26:09   

 * Copyright (c) 方勇-版权所有

 */

public class MyProvider extends ContentProvider {

/* 数据库操作 */

private DBHelper dbHelper;

/* 匹配工具类 */

private static final UriMatcher MATCHER = new UriMatcher(

UriMatcher.NO_MATCH);

/* 初始化数据,匹配工具类 */

static {

MATCHER.addURI(Const.CONTENTPROVIDER"stu", Const.STU_LIST);

MATCHER.addURI(Const.CONTENTPROVIDER"stu/#", Const.STU_DETAIL);

}

@Override

public boolean onCreate() {

dbHelper = new DBHelper(this.getContext());

/* 打开数据库 */

dbHelper.open();

return false;

}

@Override

public int delete(Uri uri, String selection, String[] selectionArgs) {

return 0;

}

@Override

public String getType(Uri uri) {

return null;

}

@Override

public Uri insert(Uri uri, ContentValues values) {

return null;

}

@Override

public Cursor query(Uri uri, String[] projection, String selection,

String[] selectionArgs, String sortOrder) {

/* 匹配URI,是C还是D */

switch (MATCHER.match(uri)) {

/*多条记录*/

case Const.STU_LIST:

return dbHelper.findList("stu"nullnullnullnullnullnull);

case Const.STU_DETAIL:

long id = ContentUris.parseId(uri);

String where =" id="+ id;

//where+= " and "+selection;

return dbHelper.findList("stu"null, where, nullnullnullnull);

default:

throw new IllegalArgumentException("uri error"+uri.toString());

}

}

@Override

public int update(Uri uri, ContentValues values, String selection,

String[] selectionArgs) {

return 0;

}

}

--------------------------------------------provider目录 Test.java-------------------------------

package com.ch23.provider;

import com.ch23.db.Const;

import android.content.ContentResolver;

import android.database.Cursor;

import android.net.Uri;

import android.test.AndroidTestCase;

/*单元测试*/

public class Test extends AndroidTestCase {

public void testQuery(){

/*取数据对象*/

ContentResolver resolver = this.getContext().getContentResolver();

/*查询所有的数据*/

Uri uri = Uri.parse("content://"+Const.CONTENTPROVIDER+"/stuss");

/*取数据*/

Cursor cursor = resolver.query(uri, new String[]{"id","name"},nullnullnull);

while(cursor.moveToNext()){

System.out.println("name:"+cursor.getString(cursor.getColumnIndex("name")));

}

}

}

--------------------------------------------结果----------------------------------------------------

<!--EndFragment-->

猜你喜欢

转载自fangyong2006.iteye.com/blog/1745439
今日推荐