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

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.