ContentProvider 的规范编写

  1. 应用情况:与其它应用共享数据
  2. 通过 ContentProvider 获取从数据库获取数据

  1. Uri 用于 访问不同的 ContentProvider

  2. 如下图:构建的路径



  3. 下面是访问 tasks 表的第3行数据



  4. 通配符的使用
    使用 Contact 来构建所需要的 Uri ,下面内嵌的类为创建数据提供。以天气为例

这里写图片描述

public class WeatherContract {

    public static final String CONTENT_AUTHORITY = "com.example.android.sunshine";


    public static final Uri BASE_CONTENT_URI = Uri.parse("content://" + CONTENT_AUTHORITY);


    public static final String PATH_WEATHER = "weather";


    public static final class WeatherEntry implements BaseColumns {

        public static final Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon()
                .appendPath(PATH_WEATHER)
                .build();


        public static final String TABLE_NAME = "weather";


        public static final String COLUMN_DATE = "date";

        public static final String COLUMN_WEATHER_ID = "weather_id";


        public static final String COLUMN_MIN_TEMP = "min";

        public static final String COLUMN_MAX_TEMP = "max";


        public static final String COLUMN_HUMIDITY = "humidity";


        public static final String COLUMN_PRESSURE = "pressure";


        public static final String COLUMN_WIND_SPEED = "wind";

        public static final String COLUMN_DEGREES = "degrees";


        public static Uri buildWeatherUriWithDate(long date) {
            return CONTENT_URI.buildUpon()
                    .appendPath(Long.toString(date))
                    .build();
        }


        public static String getSqlSelectForTodayOnwards() {
            long normalizedUtcNow = SunshineDateUtils.normalizeDate(System.currentTimeMillis());
            return WeatherContract.WeatherEntry.COLUMN_DATE + " >= " + normalizedUtcNow;
        }
    }
}



1. 使用 URIMathcer 来区分我们需要使用的是在哪种URI。
如 下面的 CODE_WEATHER 用于查询一个完整的表,而CODE_WEATHER_WITH_DATE 用于查询表中的任意一行(使用的通配符)

  public static final int CODE_WEATHER = 100;

    public static final int CODE_WEATHER_WITH_DATE = 101;

    private static final UriMatcher sUriMatcher = buildUriMatcher();

    private WeatherDbHelper mOpenHelper;

    public static UriMatcher buildUriMatcher() {

        final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);

        final String authority = WeatherContract.CONTENT_AUTHORITY;

        matcher.addURI(authority, WeatherContract.PATH_WEATHER, CODE_WEATHER);

        matcher.addURI(authority, WeatherContract.PATH_WEATHER + "/#", CODE_WEATHER_WITH_DATE);

        return matcher;
    }



使用流程:
1. 扩展至 抽象类 ContentProvider 实现 onCrate() 方法
2. 在 AndroidManifest 中注册你的内容提供器
3. 实现增删改查等方法
4. 需要注意的是 其中又一个 getType 方法用于返回 固定的MIME类型(字符串),如图片的类型等。
5. 记得在进行增删改后更新URi。
getContext().getContentResolver().notifyChange(uri, null);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值