android开发联系人数据库中三张重要的表之间的关系(contacts表)

本文主要是介绍android开发联系人数据库中三张重要的表之间的关系(contacts表),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

三张重要的表:

     一、data表    data1   li'm里面存储的是所有联系人的信息

                       data表中的raw_contact_id 实际上是raw_contacts表中的contact_id

                       data表中的mimetype_id列对应mimetype表

    二、raw_contacts表

    三、mimetype表

读取手机联系人案例:

   步骤:

       [1]先读取raw_contacts表    读取contact_id字段   从而知道手机中有几条联系人

        [2]在读取data表      根据raw_contact_id去读取data1列和mimetype_id

具体实现代码:

    ReadContactUtils.java页面

package com.dahui.readcontact;import java.util.ArrayList;
import java.util.List;import android.content.Context;
import android.database.Cursor;
import android.net.Uri;public class ReadContactUtils {public static List<Contact> readContact(Context context){//[0]创建一个集合List<Contact> contactLists = new ArrayList<Contact>();//[1]由于联系人的数据库也是通过内容提供者暴露出来了  所以我想操作数据库直接使用内容提供者//[2]先查询raw_contacts表   contact_id列Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");Uri dataUri = Uri.parse("content://com.android.contacts/data");Cursor cursor = context.getContentResolver().query(uri, new String[] {"contact_id"}, null, null, null);while(cursor.moveToNext()) {String contact_id=cursor.getString(0);//判断contact_id是否为空if(contact_id!=null) {System.out.println("contact_id:"+contact_id);//创建javabean对象Contact contact = new Contact();contact.setId(contact_id);//[3]根据raw_contact_id去查询data表  data1列和mimetype_id列//小细节    查询的不是data表  查询的是view_data的视图Cursor dataCursor = context.getContentResolver().query(dataUri, new String[]{"data1","mimetype"},"raw_contact_id=?", new String[] {contact_id}, null);while(dataCursor.moveToNext()) {String data1 = dataCursor.getString(0);String mimetype = dataCursor.getString(1);if ("vnd.android.cursor.item/name".equals(mimetype)) {System.out.println("姓名:"+data1);contact.setName(data1);}else if("vnd.android.cursor.item/phone_v2".equals(mimetype)) {System.out.println("电话:"+data1);contact.setPhone(data1);}else if("vnd.android.cursor.item/email_v2".equals(mimetype)) {System.out.println("邮箱:"+data1);contact.setEmail(data1);}}//把javabean对象加入到集合中contactLists.add(contact);}}return contactLists;}}

Contact.java页面

package com.dahui.readcontact;public class Contact {private String id;private String name;private String email;private String phone;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}@Overridepublic String toString() {return "Contact [id=" + id + ", name=" + name + ", email=" + email + ", phone=" + phone + "]";}}

MainActivity.java页面

package com.dahui.readcontact;import java.util.List;import android.app.Activity;
import android.content.Loader.ForceLoadContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);List<Contact> readContacts = ReadContactUtils.readContact(getApplicationContext());for(Contact contact : readContacts) {System.out.println("contact:"+contact);}}}

运行截图:

使用内容解析者插入一条联系人案例:

MainActivity.java页面:

package com.dahui.insertcontact;import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;public class MainActivity extends Activity {private EditText et_name;private EditText et_phone;private EditText et_email;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_name = (EditText) findViewById(R.id.et_name);et_phone = (EditText) findViewById(R.id.et_phone1);et_email = (EditText) findViewById(R.id.et_email1);}public void click(View v) {String name = et_name.getText().toString().trim();String phone = et_phone.getText().toString().trim();String email = et_email.getText().toString().trim();Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");Uri dataUri = Uri.parse("content://com.android.contacts/data");//先查询一下rawcontacts表中有几条数据  行数+1就是contact_id的值Cursor cursor = getContentResolver().query(uri, null, null, null, null);int count = cursor.getCount();int contact_id = count + 1;//把数据插入联系人数据库ContentValues contentValues = new ContentValues();contentValues.put("contact_id", contact_id);getContentResolver().insert(uri, contentValues);//把name 插入到data表中ContentValues nameValus = new ContentValues();nameValus.put("data1", name);//把数据插入data1列nameValus.put("raw_contact_id", contact_id);//告诉数据库插入的联系人属于第几条数据nameValus.put("mimetype", "vnd.android.cursor.item/name");//告诉数据库插入的联系人数据的类型getContentResolver().insert(dataUri, nameValus);//把phone 插入到data表中ContentValues phoneValus = new ContentValues();phoneValus.put("data1", phone);//把数据插入data1列phoneValus.put("raw_contact_id", contact_id);//告诉数据库插入的联系人属于第几条数据phoneValus.put("mimetype", "vnd.android.cursor.item/phone_v2");//告诉数据库插入的联系人数据的类型getContentResolver().insert(dataUri, phoneValus);//把email 插入到data表中ContentValues emailValus = new ContentValues();emailValus.put("data1", email);//把数据插入data1列emailValus.put("raw_contact_id", contact_id);//告诉数据库插入的联系人属于第几条数据emailValus.put("mimetype", "vnd.android.cursor.item/email_v2");//告诉数据库插入的联系人数据的类型getContentResolver().insert(dataUri, emailValus);}}

activity_main.xml页面:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.dahui.insertcontact.MainActivity" ><EditText android:id="@+id/et_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入姓名"/><EditText android:id="@+id/et_phone1"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入电话号码"/><EditText android:id="@+id/et_email1"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入邮箱"/><Button android:onClick="click"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="插入联系人"/></LinearLayout>

 

这篇关于android开发联系人数据库中三张重要的表之间的关系(contacts表)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/255134

相关文章

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多