package com.example.qunzheng.todolist.provider;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils; /**
* Created by QunZheng on 2015/3/9.
*/
public class EarthquakeProvider extends ContentProvider {
public static final Uri CONTENT_URI = Uri.parse("content://com.qunzheng.earthquakeprovider/earthquakes");
public static final String KEY_ID = "_id";
public static final String KEY_DATE = "date";
public static final String KEY_DETAILS = "details";
public static final String KEY_SUMMARY = "summary";
public static final String KEY_LOCATION_LAT = "latitude";
public static final String KEY_LOCATION_LNG = "longitude";
public static final String KEY_LINK = "link";
public static final String KEY_MAGNITUDE = "magnitude"; private EarthquakeDatabaseHelper sqLiteOpenHelper = null; private static final int ALL_ROWS = 1;
private static final int SINGLE_ROW = 2; private static UriMatcher matcher = null; static {
matcher = new UriMatcher(UriMatcher.NO_MATCH);
matcher.addURI("com.qunzheng.earthquakeprovider","earthquakes",ALL_ROWS);
matcher.addURI("com.qunzheng.earthquakeprovider","earthquakes/#",SINGLE_ROW);
} @Override
public boolean onCreate() {
sqLiteOpenHelper = new EarthquakeDatabaseHelper(getContext(), EarthquakeDatabaseHelper.DATABASE_NAME, null, EarthquakeDatabaseHelper.DATABASE_VERSION);
return true;
} @Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase(); SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(EarthquakeDatabaseHelper.DATABASE_TABLE);
switch (matcher.match(uri)) {
case SINGLE_ROW:
String rowId = uri.getPathSegments().get(1);
queryBuilder.appendWhere(KEY_ID + "=" + rowId);
break;
} String orderBy;
if (TextUtils.isEmpty(sortOrder)) {
orderBy = KEY_DATE;
}else{
orderBy = sortOrder;
}
return queryBuilder.query(db,projection,selection,selectionArgs,null,null,orderBy);
} @Override
public String getType(Uri uri) {
switch (matcher.match(uri)) {
case ALL_ROWS:
return "vnd.android.cursor.dir/vnd.qunzheng.earthquakes";
case SINGLE_ROW:
return "vnd.android.cursor.item/vnd.qunzheng.earthquakes";
default:
throw new IllegalArgumentException("Unsupport Uri:" + uri);
}
} @Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase(); long id = db.insert(EarthquakeDatabaseHelper.DATABASE_TABLE, null, values); //数据插入成功
if (id > -1) {
Uri resultUri = ContentUris.withAppendedId(CONTENT_URI, id); getContext().getContentResolver().notifyChange(resultUri, null);
return resultUri;
}else{ }
return null;
} @Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase(); switch (matcher.match(uri)) {
case SINGLE_ROW:
String id = uri.getPathSegments().get(1);
selection = KEY_ID + "=" + id +
(TextUtils.isEmpty(selection) ? "" : (" and ("+ selection +")"));
break;
} if (selection == null) {
selection = "1";
} int resultRows = db.delete(EarthquakeDatabaseHelper.DATABASE_TABLE, selection, selectionArgs); getContext().getContentResolver().notifyChange(uri, null);
return resultRows;
} @Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
SQLiteDatabase db = sqLiteOpenHelper.getReadableDatabase(); switch (matcher.match(uri)) {
case SINGLE_ROW:
String id = uri.getPathSegments().get(1);
selection = KEY_ID + "=" + id +
(TextUtils.isEmpty(selection) ? "" : (" and ("+ selection +")"));
break;
} int resultRows = db.update(EarthquakeDatabaseHelper.DATABASE_TABLE, values, selection, selectionArgs);
getContext().getContentResolver().notifyChange(uri, null);
return resultRows;
} private static class EarthquakeDatabaseHelper extends SQLiteOpenHelper{ public static final String DATABASE_NAME = "earthquake.db";
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_TABLE = "earthQuake"; private static final String TABLE_CREATE = "create table " +
DATABASE_TABLE + " (" + KEY_ID + " integer primary key autoincrement, " +
KEY_DATE + " INTEGER, " +
KEY_LINK + " text, " +
KEY_LOCATION_LAT + " FLOAT, " +
KEY_LOCATION_LNG + " FLOAT, " +
KEY_SUMMARY + " TEXT, " +
KEY_MAGNITUDE + " FLOAT, " +
KEY_DETAILS + " text)"; public EarthquakeDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
} @Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CREATE);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
}
}

  

contentProvider模板的更多相关文章

  1. Android proguard-rules.pro 混淆模板

    在../sdk/tools/proguard/目录下,其中包含了android最基本的混淆 ..\proguard-rules.pro  混淆文件配置模板: ############# 混淆模板 ## ...

  2. Jade模板引擎让你飞

    写在前面:现在jade改名成pug了 一.安装 npm install jade 二.基本使用 1.简单使用 p hello jade! 渲染后: <p>hello jade!</p ...

  3. ABP入门系列(2)——通过模板创建MAP版本项目

    一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...

  4. CMS模板应用调研问卷

    截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...

  5. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  6. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  7. OpenCV模板匹配算法详解

    1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...

  8. 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...

  9. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

随机推荐

  1. [状压dp]HDOJ4539 郑厂长系列故事——排兵布阵

    中文题,题意不再赘述 对于“?”这一格,它所能攻击到的(曼哈顿距离为2的) 前方的 即“√”的四个位置 那么与此格有关的即它前方两行(即状压这两行) 首先预处理每行能满足的: i 和(i<< ...

  2. 李洪强漫谈iOS开发[C语言-022]-算术运算符

  3. GC回收建议

    1.最基本的建议就是尽早释放无用对象的引用.大多数程序员在使用临时变量的时候,都是让引用变量在退出活动域(scope)后,自动设置为 null.我们在使用这种方式时候,必须特别注意一些复杂的对象图,例 ...

  4. 【Pyhton Network】使用poll()或select()实现非阻塞传输

    通常情况下,socket上的I/O会阻塞.即除非操作结束,否则程序不会照常进行.而以下集中情况需要在非阻塞模式下进行:1. 网络接口在等待数据时是活动的,可以做出相应:2. 在不使用线程或进程的情况下 ...

  5. BZOJ_1620_[Usaco2008_Nov]_Time_Management_时间管理_(二分+贪心)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1620 N个工作,每个工作其所需时间,及完成的Deadline,问要完成所有工作,最迟要什么时候 ...

  6. Web服务器排行:Nginx超越Apache 成为全球

    Apache(34.5%)第一名的位置.不过,纵观全球,Apache仍然是最受欢迎的Web服务器,有65.3%的网站使用. 在排名前100万的网站中,主流服务器仍为Apache,占据了60.6%的份额 ...

  7. Vimwiki使用笔记

    vimwiki使用笔记 vimwiki vimwiki installation syntax Inline links Image Link Header List Table code block ...

  8. WFS

    Web 要素服务(WFS) 1定义 支持对地理要素的插入,更新,删除,检索和发现服务.该服务根据HTTP客户请求返回GML(Geography Markup Language.地理标识语言)数据. W ...

  9. oracle sys sysman system 介绍

    Oracle数据库中SYS.SYSTEM.DBSNMP.SYSMAN四用户的区别 SYS用户: SYS,默认密码为CHANGE_ON_INSTALL,当创建一个数据库时,SYS用户将被默认创建并授予D ...

  10. storm的特性

    storm的特性 Storm 是一个开源的分布式实时计算系统,可以简单.可靠地处理大量的数据流. Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个 ...