频道栏目
首页 > 资讯 > 其他 > 正文

ContentProvider 的规范编写

17-04-21        来源:[db:作者]  
收藏   我要投稿

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

Uri 用于 访问不同的 ContentProvider

如下图:构建的路径

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

通配符的使用

使用 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);

 

相关TAG标签
上一篇:Andrid内存优化之你必须知道的核心类LruCache
下一篇:认识AIDL
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站