`

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-->
  • 大小: 28.5 KB
0
0
分享到:
评论

相关推荐

    CH341 Android代码

    "CH341 Android代码"这个标题暗示了我们即将探讨的是与Android应用程序开发相关的源代码,可能是一个项目、一个库或者一个工具的实现。在这个场景中,CH341可能是项目代号或者是某个硬件接口(如CH341芯片,常用于...

    跨应用数据源ContentProvider

    在Android系统中,ContentProvider是一种核心组件,它允许应用程序之间共享数据。"跨应用数据源ContentProvider"这一主题,正是围绕如何实现不同应用程序之间的数据交换展开的。ContentProvider提供了标准化的接口,...

    ch4-5android sdk 范例大全

    《Android SDK 范例大全》是针对Android开发者的一份宝贵资源,主要涵盖了SDK中的第四章和第五章的实例代码。这份压缩包包含了两个部分,分别是CH04和CH05,它们代表了Android开发中两个关键的学习阶段。 CH04部分...

    android开发课件

    1. **Android开发基础**(ch_01android开发基础.ppt):这部分内容通常会介绍Android平台的概述,包括Android系统架构、开发环境的搭建(如安装Android Studio和SDK)、以及编写第一个Hello World应用程序。...

    android开发权威指南(第二版)源代码

    - Hello, World程序:通常在第一章,开发者会学习编写第一个简单的Android应用,了解基本的布局和控件使用。 2. **UI设计** (ch11, ch24) - 布局管理器:包括LinearLayout、RelativeLayout、ConstraintLayout等,...

    google.android.sdk开发范例大全.源码ch2-ch6

    源码ch2-ch6”提供了一系列从第二章到第六章的源码示例,旨在帮助开发者深入理解和实践SDK中的各种功能和API。 首先,让我们探讨一下SDK中的核心组件和概念: 1. **AndroidManifest.xml**:这是每个Android应用的...

    Android SDK开发范例大全(第二版)CH09.rar

    《Android SDK开发范例大全(第二版)CH09》是一个关于Android应用程序开发的资源压缩包,主要聚焦在SDK的第九章内容。Android SDK是Android应用开发者的重要工具集,它包含了构建、测试和调试Android应用所需的所有...

    android ophone开发完全讲义源码ch06

    同时,编写单元测试和集成测试以确保应用的质量。 8. **性能优化**: 开发过程中,要关注内存占用、电量消耗、启动速度等性能指标。通过优化代码、减少不必要的资源加载、使用懒加载策略等手段提高应用效率。 9. ...

    疯狂android讲义(第2版) 源码 ch04-06

    源码ch04-06涵盖了书中的第四至第六章,这部分内容通常会涉及Android开发的基础知识,包括用户界面(UI)设计、数据存储以及网络通信等关键主题。 在第四章中,我们可能会学习到Android应用程序的基本架构,比如...

    android ophone开发完全讲义源码ch12

    《Android Ophone开发完全讲义源码Ch12》是一份深入探讨Android Ophone平台开发的教程资料,其中包含了第十二章的完整源代码。这一章的焦点可能集中在特定的开发主题上,如应用程序框架、用户界面设计、系统服务集成...

    android SDK范例开发大全 第3版 源代码 CH3

    《Android SDK范例开发大全 第3版 源代码 CH3》是针对Android开发者的一份珍贵资源,它包含了第三章的全部源代码示例。这个压缩包旨在帮助开发者深入理解和应用Android SDK的各种功能,通过实际操作来提升技能。在本...

    Android ophone开发完全讲义源码ch02-08

    《Android Ophone开发完全讲义源码》涵盖了从基础到进阶的Android应用程序开发知识,主要涉及了第2章至第8章的内容。这个压缩包包含的子文件按章节顺序排列,分别是ch02、ch07、ch06、ch04、ch02(可能是重复或错误...

    android SDK范例开发大全 第3版 源代码 CH8

    《Android SDK范例开发大全 第3版 源代码 CH8》是一本专注于Android应用程序开发的实战指南,其中包含了丰富的示例代码,旨在帮助开发者深入理解Android SDK的各种功能和使用方法。这部分源代码对应的是书中的第八章...

    android ophone开发完全讲义源码ch02

    1. **系统架构**:Android Ophone与标准Android系统在架构上的异同,包括应用程序框架、库和运行时环境以及硬件抽象层的定制化部分。 2. **SDK工具**:了解用于开发Ophone应用的SDK工具,如Eclipse IDE、ADT插件、...

    Android SDK开发范例大全(第二版)CH06.rar

    《Android SDK开发范例大全(第二版)CH06》是一个关于Android开发的章节资源,主要聚焦于SDK的使用和实战技巧。这个压缩包可能包含了该章节的所有代码示例、讲解文档和其他相关材料,帮助开发者深入理解Android应用...

    Android SDK开发范例大全(第二版)CH03.rar

    《Android SDK开发范例大全(第二版)CH03》是针对Android应用程序开发的一本详尽教程,由清华大学出版社出版。这本书的第三章涵盖了Android SDK中的关键知识点,旨在帮助开发者深入理解和实践Android应用的构建过程。...

    Android/Ophone开发完全讲义

    4. **Java编程基础**:Android应用主要使用Java语言编写,因此书中的第一章通常会回顾Java基本语法,包括类、对象、异常处理、集合框架等内容,为后续的Android开发打下坚实基础。 5. **Android应用结构**:讲解...

    疯狂android讲义(第2版) ch02 1-5.zip

    《疯狂Android讲义(第2版)》是李刚老师撰写的一本深入讲解Android开发的经典教程,这本书以其详实的内容和实战导向深受开发者喜爱。在第2章中,作者主要探讨了Android的基础知识和核心概念,为后续章节的学习打下...

    Android开发完全讲义_源代码_Part.1

    1. **ch02**:此章节主要介绍Android的基础环境搭建,包括安装Android Studio、配置开发环境、理解Android项目结构以及创建第一个Hello World应用。这部分内容是初学者入门的关键,讲解了如何启动IDE、设置AVD...

    AndroidSDK开发范例大全第二版(全部源码打包)

    1. **CH08**: 这部分可能涵盖了第八章的内容,通常涉及到Android的多媒体处理,可能包括音频、视频的播放和录制,以及图像处理。开发者可能会学到如何使用`MediaPlayer`、`Camera` API和`ExoPlayer`库进行多媒体操作...

Global site tag (gtag.js) - Google Analytics