安卓开发学习笔记七

1 contentprovider的使用方法

        1.1什么是contentprovider

             

什么是ContentProvider:

是Android的四大组件之一
主要用于不同的应用程序之间实现数据共享功能

什么是ContentResolver:

是数据调用者,ContentProvider将数据发布出来,通过ContentResolver对象结合Uri进行调用
通过ContentResolver对象可以调用ContentProvider的增删改查

什么是Uri:

Uri(通用资源标识符 Universal Resource Identifer),代表数据操作的地址,每一个ContentProvider发布数据时都会有唯一的地址。
比如:content://(固定写法)+com.android.contacts(包名,可变)+/contacts(path路径)

创建自定义ContentProvider的步骤:

1.使用SQLite技术,创建好数据库和数据表
2.新建类继承ContentProvider
3.重写6个抽象方法
4.创建UriMatcher,定义Uri规则
5.在Manifest中注册provider
6.ContentResolver对ContentProvider中共享的数据进行增删改查操作

         1.2contentprovider的创建       

package com.example.work.database;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.net.Uri;
import android.text.TextUtils;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

public class TestContentProvider extends ContentProvider {

    private static UriMatcher uriMatcher;
    public static final int URI_MATCH_USER = 1;
    public static final int URI_MATCH_ITEM = 2;

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

        uriMatcher.addURI(URIList.AUTHORITY, DatabaseHelper.USERNAME, 1);
        uriMatcher.addURI(URIList.AUTHORITY, DatabaseHelper.ITEMID, 2);
    }

    private DatabaseHelper databaseHelper;

    @Override
    public boolean onCreate() {
        databaseHelper = new DatabaseHelper(getContext());
        return false;
    }

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        String tableName = getTableName(uri);
        if (TextUtils.isEmpty((tableName))) {
            return null;
        }
        Cursor cursor = databaseHelper.getReadableDatabase().query(tableName, projection, selection, selectionArgs, null, null, sortOrder);
        return cursor;
    }

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

    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        String tableName = getTableName(uri);
        if (TextUtils.isEmpty((tableName))) {
            return null;
        }
        long id = databaseHelper.getWritableDatabase().insert(tableName, null, values);
        return ContentUris.withAppendedId(url);
    }

    @Override
    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
        String tableName = getTableName(uri);
        if (TextUtils.isEmpty((tableName))) {
            return 0;
        }
        int count = databaseHelper.getWritableDatabase().delete(tableName, selection, selectionArgs);
        return count; 
    }

    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
        String tableName = getTableName(uri);
        if (TextUtils.isEmpty((tableName))) {
            return 0;
        }
        int count = databaseHelper.getWritableDatabase().update(tableName,values,selection,selectionArgs);
        return count;
    }

    private String getTableName(Uri uri) {
        int type = uriMatcher.match(uri);
        String tableName = "";
        switch (type) {
            case URI_MATCH_USER:
                tableName = DatabaseHelper.USERNAME;
                break;
            case URI_MATCH_ITEM:
                tableName = DatabaseHelper.ITEMNAME;
                break;
        }
        return tableName;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值