2020-04-14-第9周-周二

目   录

思维导图

资源网站

添加手机联系人

Android使用MediaStore获取手机上的文件

日历操作

手机联系人

MainActivity.java

MyHelper.java

PersonCp.java



思维导图

https://share.weiyun.com/1vVLYnlb

资源网站

菜鸟教程---4.4.1 ContentProvider初探

https://www.runoob.com/w3cnote/android-tutorial-contentprovider.html

https://www.cnblogs.com/sparrowlhl/p/11239530.html

https://developer.android.google.cn/guide/topics/providers/content-provider-creating

https://www.jb51.net/article/122840.htm

 

添加手机联系人

静态代码块---自动执行一次。

Android使用MediaStore获取手机上的文件

https://blog.csdn.net/yann02/article/details/92844364 

日历操作

手机联系人

MainActivity.java

package cn.wangzg.personcp;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
}

MyHelper.java

package cn.wangzg.personcp;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;import androidx.annotation.Nullable;/*** Time: 2020/4/13* Author: wangzhiguo* Description: 功能描述*/
public class MyHelper extends SQLiteOpenHelper {public MyHelper(@Nullable Context context) {super(context, "person.db", null, 1);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("create table person(id integer primary key autoincrement," +"name varchar(20),phone varchar(12),salary Integer(12))");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

PersonCp.java

package cn.wangzg.personcp;import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;import java.util.Objects;/*** Time: 2020/4/13* Author: wangzhiguo* Description: 功能描述*/
public class PersonCp extends ContentProvider { //数据库作为数据源,将数据保存到数据库中。private MyHelper mHelper;private final static String AUTHORITY = "cn.wangzg.personprovider";private static UriMatcher mUriMatcher;private static final int PERSON_DIR = 0;private static final int PERSON = 1;/*** 利用静态代码块初始化UriMatcher* 在UriMatcher中包含了多个Uri,每个Uri代表一种操作* 当调用UriMatcher.match(Uri uri)方法时就会返回该uri对应的code;* 比如此处的PERSONS和PERSON*/static {mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);// 该URI表示返回所有的person,其中PERSONS为该特定Uri的标识码mUriMatcher.addURI(AUTHORITY, "person", PERSON_DIR);// 该URI表示返回某一个person,其中PERSON为该特定Uri的标识码mUriMatcher.addURI(AUTHORITY, "person/#", PERSON);}/*** 在自定义ContentProvider中必须覆写getType(Uri uri)方法.* 该方法用于获取Uri对象所对应的MIME类型.* <p>* 一个Uri对应的MIME字符串遵守以下三点:* 1 必须以vnd开头* 2 如果该Uri对应的数据可能包含多条记录,那么返回字符串应该以"vnd.android.cursor.dir/"开头* 3 如果该Uri对应的数据只包含一条记录,那么返回字符串应该以"vnd.android.cursor.item/"开头*/@Overridepublic String getType(Uri uri) {switch (mUriMatcher.match(uri)) {case PERSON_DIR:return "vnd.android.cursor.dir/" + AUTHORITY + ".persons";case PERSON:return "vnd.android.cursor.item/" + AUTHORITY + ".person";default:throw new IllegalArgumentException("unknown uri" + uri.toString());}}@Overridepublic boolean onCreate() {mHelper = new MyHelper(getContext());return true;}/*** 插入操作:* 插入操作只有一种可能:向一张表中插入* 返回结果为新增记录对应的Uri* 方法db.insert()返回结果为新增记录对应的主键值*/@Overridepublic Uri insert(Uri uri, ContentValues values) {SQLiteDatabase db = mHelper.getWritableDatabase();switch (mUriMatcher.match(uri)) {case PERSON_DIR:long newId = db.insert("person", "name,phone,salary", values);//向外界通知该ContentProvider里的数据发生了变化 ,以便ContentObserver作出相应getContext().getContentResolver().notifyChange(uri, null);return ContentUris.withAppendedId(uri, newId);default:throw new IllegalArgumentException("unknown uri" + uri.toString());}}/*** 更新操作:* 更新操作有两种可能:更新一张表或者更新某条数据* 在更新某条数据时原理类似于查询某条数据,见下.*/@Overridepublic int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {SQLiteDatabase db = mHelper.getWritableDatabase();int updatedNum = 0;switch (mUriMatcher.match(uri)) {// 更新表case PERSON_DIR:updatedNum = db.update("person", values, selection, selectionArgs);break;// 按照id更新某条数据case PERSON:long id = ContentUris.parseId(uri);String where = "id=" + id;if (selection != null && !"".equals(selection.trim())) {where = selection + " and " + where;}updatedNum = db.update("person", values, where, selectionArgs);break;default:throw new IllegalArgumentException("unknown uri" + uri.toString());}//向外界通知该ContentProvider里的数据发生了变化 ,以便ContentObserver作出相应Objects.requireNonNull(getContext()).getContentResolver().notifyChange(uri, null);return updatedNum;}/*** 删除操作:* 删除操作有两种可能:删除一张表或者删除某条数据* 在删除某条数据时原理类似于查询某条数据,见下.*/@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {SQLiteDatabase db = mHelper.getWritableDatabase();int deletedNum = 0;switch (mUriMatcher.match(uri)) {// 删除表case PERSON_DIR:deletedNum = db.delete("person", selection, selectionArgs);break;// 按照id删除某条数据case PERSON:long id = ContentUris.parseId(uri);String where = "id=" + id;if (selection != null && !"".equals(selection.trim())) {where = selection + " and " + where;}deletedNum = db.delete("person", where, selectionArgs);break;default:throw new IllegalArgumentException("unknown uri" + uri.toString());}//向外界通知该ContentProvider里的数据发生了变化 ,以便ContentObserver作出相应Objects.requireNonNull(getContext()).getContentResolver().notifyChange(uri, null);return deletedNum;}/*** 查询操作:* 查询操作有两种可能:查询一张表或者查询某条数据* <p>* 注意事项:* 在查询某条数据时要注意--因为此处是按照id来查询* 某条数据,但是同时可能还有其他限制.例如:* 要求id为2且name为xiaoming1* 所以在查询时分为两步:* 第一步:* 解析出id放入where查询条件* 第二步:* 判断是否有其他限制(如name),若有则将其组拼到where查询条件.* <p>* 详细代码见下.*/@Overridepublic Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {SQLiteDatabase db = mHelper.getWritableDatabase();Cursor cursor = null;switch (mUriMatcher.match(uri)) {// 查询表case PERSON_DIR:cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);break;// 按照id查询某条数据case PERSON:// 第一步:long id = ContentUris.parseId(uri);String where = "id=" + id;// 第二步:if (selection != null && !"".equals(selection.trim())) {where = selection + " and " + where;}cursor = db.query("person", projection, where, selectionArgs, null, null, sortOrder);break;default:throw new IllegalArgumentException("unknown uri" + uri.toString());}return cursor;}
}

蟹蟹观看~~~

Android复习08【内容提供者】相关推荐

  1. android 53 ContentProvider内容提供者

    ContentProvider内容提供者:像是一个中间件一样,一个媒介一样,可以以标准的增删改差操作对手机的文件.数据库进行增删改差.通过ContentProvider查找sd卡的音频文件,可以提供标 ...

  2. Android 使用ContentProvider(内容提供者)查询手机联系

    在开发应用程序过程中有时候会关联到用户的手机联系人,在Android的为开发者提供了ContentProvider内容提供者来获取手机的联系人,首先我在模拟器中保存了两个联系人如下所示: lisi:电 ...

  3. android基础之内容提供者使用

    上一篇我们说了我内容提供者的创建.这篇我们主要说下内容提供中的使用方法. 要使用内容提供者,我们需要借助于内容提供者的一个工具类ContentResolver.ContentResolver里面的增删 ...

  4. Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容...

    一.什么是ContentProvider? ContentProvider直译过来就是内容提供者,主要作用就是A应用提供接口给B应用调用数据,和之前介绍的sharedPreference和直接开放文件 ...

  5. Android存储数据---内容提供者ContentProvider

    简介 内容提供者的使用 2. 实例 (1)activity_main.xml <?xml version="1.0" encoding="utf-8"?& ...

  6. Android中创建内容提供者要继承,Android中创建内容提供者要继承( )。

    摘要: 图像则y过(b的一定,中者要图1像如的图已知所示.人不工程定支按约承包酬务报付劳,内容应(.认识同实现状向和醒的个清结果对合.提供趋有一施的.... 图像则y过(b的一定,中者要图1像如的图已 ...

  7. Android开发14——监听内容提供者ContentProvider的数据变化

    一.提出需求 有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者ContentProvider:A应用修改了B应用的数据,插入了一条数据.有这样一个需求,此时C应用需要得到数据被修改 ...

  8. Android 内容提供者(Content provider)

    原文地址:http://justsee.iteye.com/blog/936612 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然 ...

  9. android内容提供者_挖穿Android第三十九天

    为什么需要内容提供者 回顾数据库知识: [1]定义一个类继承SqliteOpenHelper [2]想要操作数据库必须获取一个SqliteDatabase对象 [3]chmod修改文件的权限 实际应用 ...

最新文章

  1. 离开宁静的农村,走进喧嚣的城市:搬家!
  2. ITK:对给定LabelMap的所有LabelObject应用形态学关闭操作
  3. 编程语言发展的编年史
  4. Apache Mahout:适合所有人的可扩展机器学习框架
  5. P2290-[HNOI2004]树的计数【组合数,Prufer序列】
  6. JDK线程池CompletionService的使用
  7. caffe 图片数据的转换成lmdb和数据集均值(转)
  8. 误区30日谈21-24
  9. Web容器默认的servlet
  10. Mybatis 参考
  11. 逆向工程核心原理笔记
  12. flash cs4 打不开的解决方法(启动界面一闪而过)
  13. centOS7 更改主机名localhost.localdomain
  14. ABB机器人画圆编程_ABB机器人的程序编程
  15. 【马尔科夫链-蒙特卡罗】马尔科夫链-蒙特卡罗方法对先验分布进行抽样
  16. 微型计算机原理姚向华答案,微型计算机原理试题答案-微型计算机原理姚向华.doc...
  17. Python xlwt 操作 excel 表格基础(三):单元格格式、字体格式、对齐方式、边框及填充等
  18. “一县一店·全国乡土消费社群”平台:助力乡村振兴农产上行
  19. 多进程统计策略盈亏分布——从零到实盘12
  20. 生态功能区划方法之二:生态服务功能重要性评价

热门文章

  1. linux串口传文件除了rz,使用sz/rz基于串口传输文件
  2. java list 移除_java 中List删除实例详解
  3. php对象怎么拆分字符串数组,在PHP中将字符串拆分为Unicode字符数组的最佳方法是什么?...
  4. web服务器是如何维护,我们如何维护Web客户端和Web服务器之间的会话?
  5. 四、深入elasticsearch中文搜索
  6. 三、新手Jupyter不会用,我十招教你盘她
  7. python的shell无法输入_python中shell如何逐行输入?
  8. 国外方案 组件化_网页webp解决方案
  9. 直播预告 | AAAI 2022论文解读:基于生成模型的语音/歌声合成与歌声美化
  10. 直播 | NeurIPS 2021:基于投影变换建模传递关系的知识图谱表示学习