ConTentProvider

一、ConTentProvider是什么

ContentProvider 主要用于在不同的应用程序之间实现数据共享的功能。

它提供了一套完整的机制,允许一个程序访问另外一个程序的数据,同时还能保证被访问数据的安全性。目前使用 Content Provider 是 Android 实现跨进称共享数据的标准方式。

二、ConTentResolver是什么

是数据调用者,ContentProvider将数据发布出来后,通过ContentResolver对象结合Uri(全局资源标识符,代表要操作的数据地址)进行调用。

三、URI是什么,标准格式是什么?

Android中的URI即通用资源标识符,Universal Resource Identifier, 简称"URI"。

Uri代表要操作的数据,Android上可用的每种资源 -包括 图像、视频片段、音频资源等都可以用Uri来表示。

URI一般由三部分组成:

1、访问资源的命名机制。 

2、资源自身的名称,由路径表示。

3、存放资源的主机名。

content://xxxxxxxx/xxxxxx

四、URIMatcher是什么

UriMatcher 类主要用于匹配Uri.

使用方法如下。

首先第一步,初始化:


UriMatcher uriMatcher;=new UriMatcher(UriMatcher.NO_MATCH);

第二步、注册需要的URI

uriMatcher.addURI("com.example.lianxi.myprovider","student",1);
        uriMatcher.addURI("com.example.lianxi.myprovider","teacher",2);

第三步、与已经注册的URI进行匹配

int a=uriMatcher.match(uri);
        switch (a){
            case 1:
                sqLiteDatabase.insert("student",null,contentValues);
                break;
        }

match方法匹配后会返回一个匹配码Code,即在使用注册方法addURI时传入的第三个参数。

五、如何使用ContentProvider(示例,附代码)

首先,我们需要创建一个类继承ContentProvider

public class StudentProvider extends ContentProvider{

然后重写增删改查的方法

package com.example.lianxi;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;

import static android.support.constraint.Constraints.TAG;

/**
 * Created by 龙波 on 2018/6/21.
 */

public class StudentProvider extends ContentProvider{

    private MyDBhelper dBhelper;
    private SQLiteDatabase sqLiteDatabase;
    private UriMatcher uriMatcher;


    {
        uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
        uriMatcher.addURI("com.example.lianxi.myprovider","student",1);
        uriMatcher.addURI("com.example.lianxi.myprovider","teacher",2);

    }

    @Override
    public boolean onCreate() {
        Log.e(TAG, "onCreate: ??????????????????????????????" );

        dBhelper=new MyDBhelper(getContext(),"student_db",null,1);
        sqLiteDatabase=dBhelper.getWritableDatabase();
        return false;
    }

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) {
        Log.e(TAG, "query: ............................" );

        Cursor c= sqLiteDatabase.query("student",null,s,strings1,null,null,null);
        return c;
    }

    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        Log.e(TAG, "getType: ........................" );
        return null;
    }

    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {
        Log.e(TAG, "insert: .........................." );

        int a=uriMatcher.match(uri);
        switch (a){
            case 1:
                sqLiteDatabase.insert("student",null,contentValues);
                break;
        }


        return null;
    }

    @Override
    public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) {
        Log.e(TAG, "delete: ........................" );
        sqLiteDatabase.delete("student",s,strings);
        return 0;
    }

    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) {
        Log.e(TAG, "update: ............................" );
        sqLiteDatabase.update("student",contentValues,s,strings);
        return 0;
    }
}

然后在Androidmanifast中注册ContentProvider


<provider
            android:authorities="com.example.lianxi.myprovider"
            android:name=".StudentProvider"
            android:exported="true"></provider>

然后我们就可以在另外的项目中去得到这个ContentProvider,操作数据库

Uri uri= Uri.parse("content://com.example.lianxi.myprovider");
        contentResolver=getContentResolver();
        contentResolver.insert(uri,new ContentValues());
我们可以通过ContentResolver调用ContentProvider中的增删改查的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值