Android(java)学习笔记251:ContentProvider使用之添加数据到联系人

1.添加联系人逻辑思路

(1)首先在raw_contacts创建一个新的id

(2)在data表里面添加这个id对应的数据

2.下面通过一个案例,说明一下如何添加一条数据到联系人:

(1)首先我们关注一下布局文件,activity_main.xml,如下:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context="com.himi.addcontact.MainActivity" >
10
11     <Button
12         android:onClick="click"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:layout_centerHorizontal="true"
16         android:layout_centerVertical="true"
17         android:text="添加一条联系人数据" />
18
19 </RelativeLayout>

布局效果如下:

(2)其次是MainActivity,如下:

 1 package com.himi.addcontact;
 2
 3 import android.app.Activity;
 4 import android.content.ContentResolver;
 5 import android.content.ContentValues;
 6 import android.database.Cursor;
 7 import android.net.Uri;
 8 import android.os.Bundle;
 9 import android.view.View;
10 import android.widget.Toast;
11
12 public class MainActivity extends Activity {
13
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_main);
18     }
19
20     //添加一条联系人信息到系统的数据库
21     public void click(View view) {
22         Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
23         Uri datauri = Uri.parse("content://com.android.contacts/data");
24         //获得ContentProvider的解析器
25         ContentResolver resolver = this.getContentResolver();
26         //1.在raw_contace表里面添加一条新的id        _id desc:表示按照id降序排列
27         Cursor cursor = resolver.query(uri, new String[]{"_id"}, null, null, "_id desc");
28         cursor.moveToFirst();
29         int _id = cursor.getInt(0);//之前,降序排列,这里获得表中最大id值
30         //计算出来新添加的条目的id
31         int newId = _id+1;
32         ContentValues values = new ContentValues();
33         values.put("contact_id", newId);
34         resolver.insert(uri, values);
35
36         //2.在data表中添加对应的数据
37         //添加电话号码phone
38         ContentValues phoneValue = new ContentValues();
39         phoneValue.put("raw_contact_id", newId);
40         phoneValue.put("mimetype", "vnd.android.cursor.item/phone_v2");
41         phoneValue.put("data1", "123456");
42         resolver.insert(datauri, phoneValue);
43         //添加姓名
44         ContentValues nameValue = new ContentValues();
45         nameValue.put("raw_contact_id", newId);
46         nameValue.put("mimetype", "vnd.android.cursor.item/name");
47         nameValue.put("data1", "步惊云");
48         resolver.insert(datauri, nameValue);
49         //添加email
50         ContentValues emailValue = new ContentValues();
51         emailValue.put("raw_contact_id", newId);
52         emailValue.put("mimetype", "vnd.android.cursor.item/email_v2");
53         emailValue.put("data1", "[email protected]");
54         resolver.insert(datauri, emailValue);
55
56         Toast.makeText(this, "添加成功", 0).show();
57     }
58 }
59  

(3)最后记得添加权限,如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.himi.addcontact"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6
 7     <uses-sdk
 8         android:minSdkVersion="15"
 9         android:targetSdkVersion="17" />
10     <uses-permission android:name="android.permission.READ_CONTACTS"/>
11     <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
12
13     <application
14         android:allowBackup="true"
15         android:icon="@drawable/ic_launcher"
16         android:label="@string/app_name"
17         android:theme="@style/AppTheme" >
18         <activity
19             android:name=".MainActivity"
20             android:label="@string/app_name" >
21             <intent-filter>
22                 <action android:name="android.intent.action.MAIN" />
23
24                 <category android:name="android.intent.category.LAUNCHER" />
25             </intent-filter>
26         </activity>
27     </application>
28
29 </manifest>

(4)布署程序到模拟器上,如下:

我们先看看系统通信录里面存在的数据,如下:

我们点击"添加一条联系人数据",如下:

时间: 2024-10-02 02:59:56

Android(java)学习笔记251:ContentProvider使用之添加数据到联系人的相关文章

Java学习笔记之[ 利用扫描仪Scanner进行数据输入 ]

/*********数据的输入********//**利用扫描仪Scanner进行数据输入 怎么使用扫描仪Scanner *1.放在类声明之前,引入扫描仪 import java.util.Scanner; *2.声明一个新的扫描仪(即向内存申请一个空间) Scanner in *3.赋值 in=new Scanner(System.in); Scanner in=new Scanner(System.in); *4.使用扫描仪 整形数据输入:in.nextInt()来接收 双精度小数输入:in

android NDK 学习笔记(4)---eclipse 添加代码提示功能

1.选择项目右键Android Tools-->Add native support,然后再右键property. 随便选一个android的文件夹下面的include导入点击确定. 导入后会自动生成下面的文件,不用我们自己新建.c文件.系统会自动生成一个.c++的文件 编辑.cpp的文件

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl

java/android 设计模式学习笔记(10)---建造者模式

这篇博客我们来介绍一下建造者模式(Builder Pattern),建造者模式又被称为生成器模式,是创造性模式之一,与工厂方法模式和抽象工厂模式不同,后两者的目的是为了实现多态性,而 Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程.一个复杂的对象有大量的组成部分,比如汽车它有车轮.方向盘.发动机.以及各种各样的小零件,要将这些部件装配成一辆汽车,这个装配过

java/android 设计模式学习笔记(一)---单例模式

前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使用的时候也会有一些坑. PS:对技术感兴趣的同鞋加群544645972一起交流 设计模式总目录 java/android 设计模式学习笔记目录 特点 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的使用很广泛,比如:线程池(threadpool).缓存(cache).对

java/android 设计模式学习笔记(7)---装饰者模式

这篇将会介绍装饰者模式(Decorator Pattern),装饰者模式也称为包装模式(Wrapper Pattern),结构型模式之一,其使用一种对客户端透明的方式来动态的扩展对象的功能,同时它也是继承关系的一种替代方案之一,但比继承更加灵活.在现实生活中也可以看到很多装饰者模式的例子,或者可以大胆的说装饰者模式无处不在,就拿一件东西来说,可以给它披上无数层不一样的外壳,但是这件东西还是这件东西,外壳不过是用来扩展这个东西的功能而已,这就是装饰者模式,装饰者的这个角色也许各不相同但是被装饰的对

java/android 设计模式学习笔记(13)---享元模式

这篇我们来介绍一下享元模式(Flyweight Pattern),Flyweight 代表轻量级的意思,享元模式是对象池的一种实现.享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,缓存可共享的对象,来达到对象共享和避免创建过多对象的效果,这样一来就可以提升性能,避免内存移除和频繁 GC 等. 享元模式的一个经典使用案例是文本系统中图形显示所用的数据结构,一个文本系统能够显示的字符种类就是那么几十上百个,那么就定义这么些基础字符对象,存储每个字符的显示外形和其他的格式化数据

java/android 设计模式学习笔记(12)---组合模式

这篇我们来介绍一下组合模式(Composite Pattern),它也称为部分整体模式(Part-Whole Pattern),结构型模式之一.组合模式比较简单,它将一组相似的对象看作一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别.这个最典型的例子就是数据结构中的树了,如果一个节点有子节点,那么它就是枝干节点,如果没有子节点,那么它就是叶子节点,那么怎么把枝干节点和叶子节点统一当作一种对象处理呢?这就需要用到组合模式了. 转

java/android 设计模式学习笔记(9)---代理模式

这篇博客我们来介绍一下代理模式(Proxy Pattern),代理模式也成为委托模式,是一个非常重要的设计模式,不少设计模式也都会有代理模式的影子.代理在我们日常生活中也很常见,比如上网时连接的代理服务器地址,更比如我们平时租房子,将找房子的过程代理给中介等等,都是代理模式在日常生活中的使用例子. 代理模式中的代理对象能够连接任何事物:一个网络连接,一个占用很多内存的大对象,一个文件,或者是一些复制起来代价很高甚至根本不可能复制的一些资源.总之,代理是一个由客户端调用去访问幕后真正服务的包装对象