当前位置:操作系统 > 安卓/Android >>

android ContentProvider解析使用

 

一.1.ContentProvider为存储数据提供了统一的接口,使用ContentProvider可以使应用程序实现数据的共享

    2.每隔ContentProvider都拥有一个公共的URI叫做CONTENT_URI;用于表示ContentProvider所提供的数据

    3.ContentProvider提供以下函数query(),    insert();    update();    delete();    getType();    onCreate();(oncreate()函数在ContentProvider启动的时候,进行启动);

    4.实现ContentProvider的过程

        4.1定义一个CONTENT_URI常量,用于访问ContentProvider;

        4.2定义一个类,继承ContentProvider

        4.3实现其函数insert();update();delete();query();getType();onCreate();

        4.4不要忘记在AndroidManifest.xml中声明

 

下面这个类是对ContentProvider的一些定义

 

view plain

package net.androidla.contentprovider; 

 

import android.net.Uri; 

import android.provider.BaseColumns; 

 

public class MyContentProviderMetaData { 

    public static final String AUTHORIY = "net.androidla.contentprovider.MyContentProvider"; 

    public static final String DATABASE_NAME = "androidla.db"; 

    public static final int DATABASE_VERSION = 1; 

    public static final String USERS_TABLE_NAME = "users"; 

     

    public static final class UserTableMetaData implements BaseColumns { 

        public static final String TABLE_NAME = "users"; 

        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORIY + "/users"); 

        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.mycontentprovider.user"; 

        public static final String CONTENT_TYPE_ITEM = "vnd.android.cursor.item/vnd.mycontentprovider.user"; 

        public static final String USER_NAME = "name"; 

        public static final String DEFAULT_SORT_ORDER = "_id desc"; 

    } 

 

 

 

5.URI类简介

Uri代表了要操作的数据,Uri主要包含两部分信息,1是需要操作的ContentProvider,2对ContentProvider的什么数据进行操作。一个Uri有以下几部分,5.1scheme:ContentProvider(内容提供者)的scheme已经由Android所规定为:content://

            5.2主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。

            5.3路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:

        要操作contact表中id为10的记录,可以构建这样的路径:/contact/10

      要操作contact表中id为10的记录的name字段,contact/10/name

        要操作contact表中的所有记录,可以构建这样的路径:/contact

 

这个是ContentProvider

 

view plain

package net.androidla.contentprovider; 

 

import java.util.HashMap; 

 

import net.androidla.contentprovider.MyContentProviderMetaData.UserTableMetaData; 

import net.androidla.databasehelper.SqliteHelper; 

import android.content.ContentProvider; 

import android.content.ContentUris; 

import android.content.ContentValues; 

import android.content.UriMatcher; 

import android.database.Cursor; 

import android.database.SQLException; 

import android.database.sqlite.SQLiteDatabase; 

import android.database.sqlite.SQLiteQueryBuilder; 

import android.net.Uri; 

import android.text.TextUtils; 

 

public class MyContentProvider extends ContentProvider { 

    public static final UriMatcher uriMatcher; 

    public static final int INCOMING_USER_COLLECTION = 1; 

    public static final int INCOMING_USER_SINGLE = 2; 

    private SqliteHelper sqliteHelper; 

    static { 

        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 

        uriMatcher.addURI(MyContentProviderMetaData.AUTHORIY, "users", INCOMING_USER_COLLECTION); 

        uriMatcher.addURI(MyContentProviderMetaData.AUTHORIY, "users/#", INCOMING_USER_SINGLE); 

    } 

    public static HashMap<String, String> userProjectionMap; 

    static { 

        userProjectionMap = new HashMap<String, String>(); 

        userProjectionMap.put(UserTableMetaData._ID, UserTableMetaData._ID); 

        userProjectionMap.put(UserTableMetaData.USER_NAME, UserTableMetaData.USER_NAME); 

    } 

    @Override 

    public int delete(Uri arg0, String arg1, String[] arg2) { 

        return 0; 

    } 

    @Override 

    public String getType(Uri uri) { 

        switch (uriMatcher.match(uri)) { 

        case INCOMING_USER_COLLECTION: 

            return UserTableMetaData.CONTENT_TYPE; 

        case INCOMING_USER_SINGLE: 

            return UserTableMetaData.CONTENT_TYPE_ITEM; 

        default: 

            throw new IllegalArgumentException("Unknown URI" + uri); 

        } 

    } 

    @Override 

    public Uri insert(Uri uri, ContentValues values) { 

        SQLiteDatabase db = sqliteHelper.getWritableDatabase(); 

        long rowId = db.insert(UserTableMetaData.TABLE_NAME, null, values); 

        if (rowId > 0) { 

            Uri insertUserUri = ContentUris.withAppendedId(UserTableMetaData.CONTENT_URI, rowId); 

            getContext().getContentResolver().notifyChange(insertUserUri, null);&

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,