android内容提供者ContentProvider,UriMatcher和内容观察者ContentObserver常见使用

本文详细介绍了Android中ContentProvider、UriMatcher的使用以及如何创建数据库和表。通过实例展示了如何配置ContentProvider、实现UriMatcher,以及进行数据的增删改查。同时,文章提到了内容观察者ContentObserver的注册与注销,以及在测试和实际应用中的运用,强调了在ListView中展示数据和使用AsyncTask加载数据的重要性。
摘要由CSDN通过智能技术生成

最不知疲倦的事情就是我们最喜欢的事情

内容提供者ContentProvider,UriMatcher

说到,内容提供者,我们立马想到的应该是数据库,让我们先去建立数据库吧

> public class MySqliteOpenHelper extends SQLiteOpenHelper {
   
    public MySqliteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
 }

继承SQLiteOpenHelper要我们实现这三个方法,先看下构造函数,第一个参数是上下文,第二个参数是数据库名,第三个参数是..我也没用过,一般填null,第四个参数是数据库的版本号,版本号是什么意思呢,是这样的,当我们new MySqliteOpenHelper对象的时候,如果同一数据库传入版本号1即会执行onCreat方法,你再继续接着new还传版本号1的话,就不执行onCreat了,因为版本1的数据库已经决定好了,但是同一数据库如果你传2的话,这是表明数据库升级了,这时候执行onUpgrade这个方法.好了,我们这里不需要对数据库进行升级,也只创建一个数据库,所以我们把这个类改造一下

> public MySqliteOpenHelper(Context context) {
        super(context, "db1", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE myTableName(_id integer primary key autoincrement, name TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

在onCreat中我们创建了一个表,名字叫做,没错,就叫做我的表名myTableName,它有两个字段_id主键,这android系统的数据库也喜欢把这个当主键,我们跟随潮流,还有一个字段就是name了,好了SqliteOpenHelper搞好了,我们开始我们的内容提供者吧

> public class MyContentProvider extends ContentProvider{
   
    @Override
    public boolean onCreate() {
        return false;
    }

    @Nullable
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        return null;
    }

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

    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }

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

ContentProvider是一个抽象类,继承它要我们实现上面那些方法.看到onCreat方法,我们当然看它了,点进去看看

> *
     * @return true if the provider was successfully loaded, false otherwise
     */
    public abstract boolean onCreate();

前面还有一大堆介绍的,有点长.意思就是说如果我们的SQLiteOpenHelper准备好了后就返回true否则返回false,所以我们这样改

> private MySqliteOpenHelper mMySqliteOpenHelper;
@Override
    public boolean onCreate() {

        mMySqliteOpenHelper = new MySqliteOpenHelper(getContext());

        return mMySqliteOpenHelper != null;
    }

接下来我们做什么呢,等等,内容提供者是四大组件之一啊,所以我们应该去清单文件中配置下它啊

> <provider
            android:name=".db.MyContentProvider"
            android:authorities="com.it.contentprovidernote.myauthorities"/>

看到这个authorities没有,我们俗称主机名,怎么翻译来的我也不知道….如果不配置它是会提示有错误!当然配置成什么样根据自己决定.配置好主机名就轮到我们的UriMatcher登场了

> public static 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值