初涉Android之ContentProvider

Android  /  houtizong 发布于 3年前   84

初涉Android之ContentProvider

 

 

一、ContentProvider的作用,可以让其它应用访问本应用的数据

第一步:定义ContentProvider如下:

import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;public class PersonProvider extends ContentProvider {private DBOpenHelper helper = null;private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH);private static final int PERSONS = 1; private static final int PERSON = 2;static {MATCHER.addURI("cn.hpu.edu.personprovider", "person", PERSONS);MATCHER.addURI("cn.hpu.edu.personprovider", "person/#", PERSON);}/** * 删除数据库中相应的数据 */public int delete(Uri uri, String selection, String[] selectionArgs) {SQLiteDatabase db = helper.getWritableDatabase();int num = 0;switch(MATCHER.match(uri)) {case PERSONS :num = db.delete("person", selection, selectionArgs);break;case PERSON :long rowid = ContentUris.parseId(uri);String where = " id = " + rowid;if(selection != null && !"".equals(selection.trim())) {where += " and " + selection;}num = db.delete("person", where, selectionArgs);break;default :throw new IllegalArgumentException("this is An Unkown Uri : " + uri.toString());}return num;}@Overridepublic String getType(Uri uri) {return null;}/** * 向内容提供者里面插入数据 */public Uri insert(Uri uri, ContentValues values) {SQLiteDatabase db = helper.getWritableDatabase();switch(MATCHER.match(uri)) {case PERSONS:long rowid = db.insert("person", "name", values);Uri insertUri = ContentUris.withAppendedId(uri, rowid);return insertUri;default: throw new IllegalArgumentException("this is An Unknown Uri:" + uri.toString());}}/** * 该方法只调用一次用于初始化环境 */public boolean onCreate() {helper = new DBOpenHelper(this.getContext());return true;}/** * 按条件查询结果集并返回游标 */public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {SQLiteDatabase db = helper.getReadableDatabase();switch(MATCHER.match(uri)) {case PERSONS : return db.query("person", projection, selection, selectionArgs, null, null, sortOrder);case PERSON :long rawid = ContentUris.parseId(uri);String where = " id = " + rawid;if(selection != null && !"".equals(selection.trim())) {where += " and " + selection;}return db.query("person", projection, where, selectionArgs, null, null, sortOrder);default :throw new IllegalArgumentException("this is An Unknown Uri : " + uri.toString());}}/** * 更新数据 */public int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {SQLiteDatabase db = helper.getWritableDatabase();int num = 0;switch(MATCHER.match(uri)) {case PERSONS :num = db.update("person", values, selection, selectionArgs);break;case PERSON :long rowid = ContentUris.parseId(uri);String where = " id = " + rowid;if(selection != null && !"".equals(selection.trim())) {where += " and " + selection;}num = db.update("person", values, where , selectionArgs);break;default :throw new IllegalArgumentException("this is An Unknown Uri : " + uri.toString());}return num;}}

 

第二步:在本应用的AndroidManifest.xml里面声明Provider

 

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="cn.hpu.edu"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="17" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >                <provider android:name=".util.PersonProvider" android:authorities="cn.hpu.edu.personprovider"></provider>        <activity            android:name="cn.hpu.edu.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>    <instrumentation         android:name="android.test.InstrumentationTestRunner"        android:targetPackage="cn.hpu"        android:label="Tests for PersonService"></instrumentation></manifest>

 第三步:在另外一个应用里面添加如下测试:

import android.content.ContentResolver;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.test.AndroidTestCase;import android.util.Log;public class TestAccessContentProvider extends AndroidTestCase {private static final String TAG = "TestAccessContentProvider";private static final String URI = "content://cn.hpu.edu.personprovider/person";public void testInsert() throws Exception {Uri uri = Uri.parse(URI);ContentResolver resolver = this.getContext().getContentResolver();ContentValues values = new ContentValues();values.put("id", 45);values.put("name", "qiernsdf");values.put("phone", "123456789");resolver.insert(uri, values);}public void testDelete() throws Exception {Uri uri = Uri.parse(URI + "/10");ContentResolver resolver = this.getContext().getContentResolver();resolver.delete(uri, null, null);}public void testUpdate() throws Exception {Uri uri = Uri.parse(URI + "/11");ContentResolver resolver = this.getContext().getContentResolver();ContentValues values = new ContentValues();values.put("name" , "updateValues");resolver.update(uri, values, null, null);}public void testFind() throws Exception {Uri uri = Uri.parse(URI);ContentResolver resolver = this.getContext().getContentResolver();Cursor cursor = resolver.query(uri, null, null, null, " id asc");while(cursor.moveToNext()) {Log.i(TAG ,cursor.getString(cursor.getColumnIndex("name")));}}}

 

 

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客