97干视频,99国产精品懂色,亚洲精品99久久久久中文字幕,伊人五月丁香综合AⅤ,国产精品成人免费999

  您的位置:華清遠(yuǎn)見(jiàn)教育科技集團(tuán) >> 新聞動(dòng)態(tài) >> Android資料 >> Android開(kāi)發(fā)之創(chuàng)建ContentProvider  
 
Android開(kāi)發(fā)之創(chuàng)建ContentProvider
分享到:

通過(guò)之前的講解,對(duì)ContentProvider有了比較全面的理解。那么如何創(chuàng)建ContentProvider呢?一般情況下,程序開(kāi)發(fā)人員在創(chuàng)建自己的ContentProvider的過(guò)程可以分為以下三步。

(1)首先,繼承ContentProvider類,并覆蓋ContentProvider的抽6個(gè)抽象方法。新建立的類繼承ContentProvider后,需覆蓋的6個(gè)方法如下。

□  public boolean onCreate(),當(dāng)ContentProvider 生成時(shí)調(diào)用此方法,主要實(shí)現(xiàn)初始化底層數(shù)據(jù)集和建立數(shù)據(jù)鏈接等工作。

□  public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) ,此方法返回一個(gè)Cursor 對(duì)象作為查詢結(jié)果集。

□  public Uri insert(Uri uri, ContentValues initialValues),此方法負(fù)責(zé)往數(shù)據(jù)集當(dāng)中插入一列,并返回這一列的Uri。

□  public int delete(Uri uri, String where, String[] whereArgs),此方法負(fù)責(zé)刪除指定Uri 的數(shù)據(jù)。

□  public int update(Uri uri, ContentValues values, String where,String[] whereArgs) ,此方法負(fù)責(zé)更新指定Uri 的數(shù)據(jù)。

□  public String getType(Uri uri) ,返回所給Uri 的MIME 類型,如果Uri是單條數(shù)據(jù),則返回的MIME數(shù)據(jù)類型應(yīng)以vnd.android.cursor.item開(kāi)頭;如果Uri是多條數(shù)據(jù),則返回的MIME數(shù)據(jù)類型應(yīng)以vnd.android.cursor.dir/開(kāi)頭。

新建立的類繼承ContentProvider后,Eclipse會(huì)提示程序開(kāi)發(fā)人員需要覆蓋部分代碼,并自動(dòng)生成需要覆蓋的代碼框架。代碼清單7-48所示的代碼是Eclipse自動(dòng)生成的代碼框架。

代碼清單7-48 繼承ContentProvider后的代碼框架


import android.content.*;
    import android.database.Cursor;
    import android.net.Uri;

    public class PeopleProvider extends ContentProvider{

        @Override
        public int delete(Uri uri, String selection, String[] selectionArgs) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public String getType(Uri uri) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Uri insert(Uri uri, ContentValues values) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public oolean onCreate() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public int update(Uri uri, ContentValues values, String selection,
        String[] selectionArgs) {
            // TODO Auto-generated method stub
            return 0;
        }
    }

(2)聲明CONTENT_URI,實(shí)現(xiàn)UriMatcher。

在上一步中,知道在返回所給Uri 的MIME 類型即實(shí)現(xiàn)getType(Uri uri)時(shí),需通過(guò)Uri是單條數(shù)據(jù)還是多條數(shù)據(jù)來(lái)確認(rèn)其返回的MIME數(shù)據(jù)類型。在新構(gòu)造的ContentProvider類中,通過(guò)構(gòu)造一個(gè)UriMatcher,判斷Uri是單條數(shù)據(jù)還是多條數(shù)據(jù)。為了便于判斷和使用Uri,一般將Uri的授權(quán)者名稱和數(shù)據(jù)路徑等內(nèi)容聲明為靜態(tài)常量,并聲明CONTENT_Uri。

聲明CONTENT_Uri和構(gòu)造UriMatcher的代碼如代碼清單7-49所示。

代碼清單7-49 聲明CONTENT_URI和構(gòu)造UriMatcher


//聲明了Uri的授權(quán)者名稱
    public static final String AUTHORITY = "cn.com.farsight.peopleprovider";
    //聲明了單條數(shù)據(jù)的數(shù)據(jù)路徑
    public static final String PATH_SINGLE = "people/#";
    //聲明了多條數(shù)據(jù)的數(shù)據(jù)路徑
    public static final String PATH_MULTIPLE = "people";
    //聲明了CONTENT_URI的字符串形式
    public static final String CONTENT_URI_STRING = "content://" +
                        AUTHORITY + "/" + PATH_MULTIPLE;
    //聲明了CONTENT_URI
    public static final Uri CONTENT_URI = Uri.parse
                        (CONTENT_URI_STRING);
    //聲明了多條數(shù)據(jù)的返回代碼
    private static final int MULTIPLE_PEOPLE = 1;
    //聲明了單條數(shù)據(jù)的返回代碼
    private static final int SINGLE_PEOPLE = 2;

    //聲明了UriMatcher
    private static final UriMatcher uriMatcher;
    //靜態(tài)構(gòu)造方法,聲明了UriMatcher的匹配方式和返回代碼
    static {
        // UriMatcher.NO_MATCH表示Uri無(wú)匹配時(shí)的返回代碼
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        //addURI()方法用來(lái)添加新的匹配項(xiàng)
        uriMatcher.addURI(AUTHORITY, PATH_SINGLE, MULTIPLE_PEOPLE);
        uriMatcher.addURI(AUTHORITY, PATH_MULTIPLE, SINGLE_PEOPLE);
    }

其中,addURI()方法用來(lái)添加新的匹配項(xiàng),語(yǔ)法如代碼清單7-50所示。

代碼清單7-50 addURI()方法語(yǔ)法


public void addURI (String authority, String path, int code)

其中,authority表示匹配的授權(quán)者名稱;path表示數(shù)據(jù)路徑,#可以代表任何數(shù)字;code表示返回代碼。

使用UriMatcher時(shí),則可以直接調(diào)用match()方法,對(duì)指定的Uri進(jìn)行判斷,示例代碼如代碼清單7-51所示。

代碼清單7-51 調(diào)用match()方法,對(duì)指定的URI進(jìn)行判斷


switch(uriMatcher.match(uri)){
        case MULTIPLE_PEOPLE:
            //多條數(shù)據(jù)的處理過(guò)程
            break;
        case SINGLE_PEOPLE:
            //單條數(shù)據(jù)的處理過(guò)程
            break;
        default:
            throw new IllegalArgumentException("不支持的URI:" + uri);
    }

(3)注冊(cè)ContentProvider。

在完成ContentProvider類的代碼實(shí)現(xiàn)后,需要在AndroidManifest.xml文件中進(jìn)行注冊(cè)。注冊(cè)ContentProvider使用<provider>標(biāo)簽,例如,注冊(cè)了一個(gè)授權(quán)者名稱為cn.com.farsight.peopleprovider的ContentProvider,其實(shí)現(xiàn)類是PeopleProvider的示例代碼如代碼清單7-52所示。

代碼清單7-52 注冊(cè)ContentProvider


<application android:icon="@drawable/icon"
            android:label="@string/app_name">
    <provider android:name =".PeopleProvider"
            android:authorities ="cn.com.farsight.peopleprovider"/>
    </application>

 更多相關(guān)文章

·Android開(kāi)發(fā)之SQLite數(shù)據(jù)庫(kù)簡(jiǎn)介
·Android開(kāi)發(fā)之SharedPreferences數(shù)據(jù)存儲(chǔ)方式
·Android開(kāi)發(fā)之SharedPreferences示例
·Android開(kāi)發(fā)之Intent解析
·Android開(kāi)發(fā)之使用Intent隱式啟動(dòng)Activity