android基础之五——内容提供者

内容提供者

01_为什么需要内容提供者

为了能够让其他应用程序访问本地应用程序中数据库,使用内容提供者对外开放几个接口,让其他应用程
序调用这些接口。

02_编写内容提供者(重点)

步骤:

1、在工程中添加一个内容提供者的类,继承ContentProvider,重写其中的方法;
2、在配置文件中配置一个provider,指定主机名唯一标示内容提供者(android4.1.2之后的版本中,需要指定exported=true,否则其他应程序没有权限访问该内容提供者);
3、在内容提供者类里面,创建一个uriMather(柜员),然后做岗前培训,添加增删改查的uri;
4、在内容提供者的增删改查的方法判断uri是否匹配正确,再调用数据库的增删改查的方法访问数据库;

03_内容提供者工作的原理(重点)

在其他应用程序中,通过内容提供者的解析器,操作内容提供者。
通过一个uri唯一的匹配内容提供者,在uri中指定了操作的路径(内容提供者已经匹配过的路径),内容提供者接收到这个uri后就可以做相应的操作;

uri url
http://www.baidu.com:80/i.html
content
ftp://


uri组成:schemel,主机名、端口、路径
http://www.baidu.com/i.html
content://com.itheima.dbapp.accountcontentprovider/delete

04_内容提供者的增删改查的实现

代码:

package com.itheima.dbapp;
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;
public class AccountContentProvider extends ContentProvider {

    private AccountDBHelper helper;
    private static String INSERT = "insert";
    private static String DELETE = "delete";
    private static String UPDATE = "update";
    private static String QUERY = "query";

    //创建一个银行的柜员
    private static UriMatcher mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    //柜员的岗前培训
    static{
//      content://com.itheima.dbapp.accountcontentprovider/insert
//      content://com.itheima.dbapp.accountcontentprovider/delete
        mUriMatcher.addURI("com.itheima.dbapp.accountcontentprovider", INSERT, 1);
        mUriMatcher.addURI("com.itheima.dbapp.accountcontentprovider", DELETE, 2);**
        mUriMatcher.addURI("com.itheima.dbapp.accountcontentprovider", UPDATE, 3);
        mUriMatcher.addURI("com.itheima.dbapp.accountcontentprovider", QUERY, 4);
    }

    /**
     * 初始化实例对象
     * 通常是创建一个数据库帮助类的对象
     */
    @Override
    public boolean onCreate(){
        helper = new AccountDBHelper(getContext());
        return false;
    }


    @Override
    public Uri insert(Uri uri, ContentValues values) {
        //匹配用户的相应操作,匹配码与柜员培训的匹配吗一致
        if(mUriMatcher.match(uri) == 1){
            SQLiteDatabase db = helper.getWritableDatabase();
            db.insert("account", null, values);
        }
        return null;
    }


    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {

        if(mUriMatcher.match(uri) == 4){
            SQLiteDatabase db = helper.getWritableDatabase();
            return db.query("account", projection, selection, selectionArgs, null, null, sortOrder);
        }else{
            return null;
        }
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {


        if(mUriMatcher.match(uri) == 3){
            SQLiteDatabase db = helper.getWritableDatabase();
             db.update("account", values, selection, selectionArgs);
        }
        return 0;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        if(mUriMatcher.match(uri) == 2){
            SQLiteDatabase db = helper.getWritableDatabase();
             db.delete("account", selection, selectionArgs);
        }
        return 0;
    }

    @Override
    public String getType(Uri uri) {
        return null;
    }
}

05_内容提供者的使用场景

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值