1. 程式人生 > >Android 聯絡人資料庫介紹以及對聯絡人的基本操作

Android 聯絡人資料庫介紹以及對聯絡人的基本操作

一、 聯絡人資料庫
聯絡人的資料庫檔案的位置
/data/data/com.Android.providers.contacts/databases.contacts2.db
這裡寫圖片描述

資料庫中重要的幾張表
這裡寫圖片描述
1、contacts表
該表儲存了所有的手機測聯絡人,每個聯絡人佔一行,該表儲存了聯絡人的
ContactID、聯絡次數、最後一次聯絡的時間、是否含有號碼、是否被新增
到收藏夾等資訊。
這裡寫圖片描述
2、raw_contacts表
該表儲存了所有建立過的手機測聯絡人,每個聯絡人佔一行,表裡有一列標
識該聯絡人是否被刪除,該表儲存了兩個ID:RawContactID和ContactID,
從而將contacts表和raw_contacts表聯絡起來。該表儲存了聯絡人的
RawContactID、ContactID、聯絡次數、最後一次聯絡的時間、是否被添
加到收藏夾、顯示的名字、用於排序的漢語拼音等資訊。
這裡寫圖片描述

3、 mimetypes
該表定義了所有的MimeTypeID,即聯絡人的各個欄位的唯一標誌。
這裡寫圖片描述

4、data表
該表儲存了所有建立過的手機測聯絡人的所有資訊,每個欄位佔一行 ,該表
儲存了兩個ID:MimeTypeID和RawContactID,從而將data表和
raw_contacts表聯絡起來。
聯絡人的所有資訊儲存在列data1至data15中,各列中儲存的內容根據
MimeTypeID的不同而不同。如儲存號碼(MimeTypeID=5)的那行資料中,
data1列儲存號碼,data2列儲存號碼型別(手機號碼/家庭號碼/工作號碼等)。
這裡寫圖片描述

一:聯絡人資料庫查詢

public class MainActivity extends Activity {

    private ListView listView;
    private TextView empty;

    private ContentResolver resolver;

//  聯絡人表的uri
    private Uri contactsUri = Contacts.CONTENT_URI;

    private Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;

    private
Uri emailUri = ContactsContract.CommonDataKinds.Email.CONTENT_URI; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("flag","------------->NUMBER: "+ContactsContract.CommonDataKinds.Phone.NUMBER); initView(); resolver = getContentResolver(); Cursor contactsCursor = resolver.query(contactsUri, null, null, null, null); List<Map<String,Object>> data = parseCursor(contactsCursor); SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item, new String[]{"display_name","phone","email"}, new int[]{R.id.displayName,R.id.phone,R.id.email}); listView.setAdapter(adapter); listView.setEmptyView(empty); } private List<Map<String, Object>> parseCursor(Cursor contactsCursor) { List<Map<String,Object>> data = new ArrayList<Map<String,Object>>(); while(contactsCursor.moveToNext()){ Map<String,Object> map = new HashMap<String, Object>(); // 獲取聯絡人的id int _id = contactsCursor.getInt(contactsCursor.getColumnIndex(Contacts._ID)); String name = contactsCursor.getString(contactsCursor.getColumnIndex(Contacts.DISPLAY_NAME)); map.put("display_name", name); // 根據聯絡人的_id(此處獲取的_id和raw_contact_id相同,因為contacts表就是通過這兩個欄位和raw_contacts表取得聯絡)查詢電話和email // 查詢電話 Cursor phoneCursor = resolver.query(phoneUri, new String[]{ContactsContract.CommonDataKinds.Phone.DATA1}, "raw_contact_id = ?", new String[]{_id+""}, null); String phone = ""; while(phoneCursor.moveToNext()){ phone = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } map.put("phone", phone); phoneCursor.close(); phoneCursor = null; // 查詢郵箱 Cursor emailCursor = resolver.query(emailUri, new String[]{ContactsContract.CommonDataKinds.Email.ADDRESS}, "raw_contact_id = ?", new String[]{_id+""}, null); String email = null; while(emailCursor.moveToNext()){ email = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS)); } map.put("email", email); data.add(map); } return data; } private void initView() { // TODO Auto-generated method stub listView = (ListView) findViewById(R.id.listView); empty = (TextView) findViewById(R.id.empty); } }

二:聯絡人資料庫新增

//  插入資料
    public void btnInsert(View view){
//      1、向rawUri中插入一條空的資料
        ContentValues values = new ContentValues();

        Uri insert = resolver.insert(RawContacts.CONTENT_URI, values);

//      2、獲取raw_id
        long _id= ContentUris.parseId(insert);

//      3、向data表中新增資料,向data表中插入資料是分條新增,因為呼叫一次insert只能向資料庫中新增一個欄位的資料
        ContentValues valuesName = new ContentValues();
//      3.1、向哪一條聯絡人中新增資料
        valuesName.put(ContactsContract.Data.RAW_CONTACT_ID, _id);

//      3.2、新增名字
//      data1
        valuesName.put(ContactsContract.CommonDataKinds.StructuredName.DATA1, "huanhuanlele");
//      3.3、指定型別
        valuesName.put(ContactsContract.Data.MIMETYPE, 
                ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
        resolver.insert(ContactsContract.Data.CONTENT_URI, valuesName);


//      新增電話
        ContentValues valuesNumber = new ContentValues();
//      1、指定_id
        valuesNumber.put(ContactsContract.Data.RAW_CONTACT_ID, _id);

//      2、新增電話號碼
        valuesNumber.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "1234567890");

//      3、指定資料型別
        valuesNumber.put(ContactsContract.Data.MIMETYPE, 
                ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);

        resolver.insert(ContactsContract.Data.CONTENT_URI, valuesNumber);


//      新增Email
        ContentValues valuesEmail = new ContentValues();

//      1、指定_id
        valuesEmail.put(ContactsContract.Data.RAW_CONTACT_ID, _id);


//      2、新增資料
//      data1
        valuesEmail.put(ContactsContract.CommonDataKinds.Email.DATA1, "[email protected]");

//      3、指定資料型別
        valuesEmail.put(ContactsContract.Data.MIMETYPE,
                ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
        resolver.insert(ContactsContract.Data.CONTENT_URI, valuesEmail);


    }

三:聯絡人資料庫刪除

//  刪除聯絡人
    public void btnDelete(View view){
        int delete = resolver.delete(ContactsContract.Data.CONTENT_URI,
                ContactsContract.Data.RAW_CONTACT_ID+" = ?", new String[]{5+""});

        if(delete>=0){
            Toast.makeText(MainActivity.this, "刪除成功", Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(MainActivity.this, "刪除失敗", Toast.LENGTH_LONG).show();
        }
    }

四:聯絡人資料庫更新

//  更新聯絡人
    public void btnUpdate(View view){
        ContentValues valuesUpdate = new ContentValues();

        valuesUpdate.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "4444444445678");


        int update = resolver.update(ContactsContract.Data.CONTENT_URI, valuesUpdate, 
                ContactsContract.Data.RAW_CONTACT_ID+" = ? and "+
                        ContactsContract.Data.MIMETYPE+" = ?", 
                        new String[]{6+"",5+""});

        if(update>=0){//更新成功
            Toast.makeText(MainActivity.this, "更新資料成功", Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(MainActivity.this, "更新資料失敗", Toast.LENGTH_LONG).show();
        }

    }

相關推薦

Android 聯絡人資料庫介紹以及聯絡人基本操作

一、 聯絡人資料庫 聯絡人的資料庫檔案的位置 /data/data/com.Android.providers.contacts/databases.contacts2.db 資料庫中重要的幾張表 1、contacts表 該表儲存了所有的手

一種Android上基於畫素比做基本圖案識別的簡單粗暴辦法

使用者希望通過書寫不規則的圖形之後,能夠識別出這個圖案是什麼,並輸出同等大小的規則圖形。第一步當然就是識別圖案了,我用的方法原理大致分如下幾步: 1、將使用者輸入的圖片長寬壓縮為目標大小,如100*100畫素 2、和圖案庫中預留的幾張預定大小(例如100*100畫素)的基礎圖案的畫素都進行一

C++的iostream標準庫介紹以及左移與右移運算子的過載

   我們從一開始就一直在利用C++的輸入輸出在做著各種練習,輸入輸出是由iostream庫提供的,所以討論此標準庫是有必要的,它與C語言的 stdio庫不同,它從一開始就是用多重繼承與虛擬繼承實現的面向物件的層次結構,作為一個c++的標準庫元件提供給程式設計師使用。   iostr

2-activiti資料庫介紹以及配置檔案

activiti與spring整合需要的jar包 <!-- activiti jar --> <dependency> <groupI

Android Paint類介紹以及浮雕和陰影效果的設定

Paint類介紹 Paint即畫筆,在繪製文字和圖形用它來設定圖形顏色, 樣式等繪製資訊。 1.圖形繪製 setARGB(int a,int r,int g,int b); 設定繪製的顏色,a代表透明度,r,g,b代表顏色值。 setAl

Python-借助xlsxwriterExcel基本操作

ring log tle src ima 文件 條形圖 def title 1導入第三方包,需單獨下載,安裝pip工具的情況下,可使用CMD下命令:pip install xlsxwriter 1 import xlsxwriter 2創建excel文件,新增一個工作簿

MySQL資料庫與資料表的基本操作

初學小建議 MySQL是不區分大小寫的,大家在初學的時候希望能養成習慣,把保留詞,關鍵字統一採用大寫的形式書寫,其他的使用小寫字母,方便區分。 初期這個習慣可能不太容易養成,但是一旦習慣,對工作的規範性會好很多,統一的規範方便大家一起工作! 選單

資料庫和資料表的基本操作

一、資料庫的操作 // 登陸mysql資料庫 mysql -u root -p; // 建立資料庫 CREATE DATABASE db_book; // 檢視所有資料庫 SHOW DATABASE; // 選擇資料庫 USE db_book; // 檢視所有資料表 SHOW TAB

mysql 資料庫的概念和的基本操作

SQL: Struct Query  Language(結構化查詢語言) ,其實是一個“國際化”標準。各種關係資料庫,其實都是實現(並擴充)該標準的一種產品。 資料庫的本質就是將大量的“資料值”通過資料庫管理系統進行某種複雜但是邏輯結構上清晰有序的儲存。資料庫的結構:資料:data資料庫:datebase 指

mysql資料庫中表和資料的基本操作

資料庫的結構為:資料庫→表→資料資料庫建立完成後不能直接新增資料,需先建表,在表裡寫資料表的建立:create  table  [if not  exists] 表名(欄位列表, [約束或索引列表],欄位列表, [約束或索引列表],索引約束) [表選項列表];刪除:drop&nb

微信小程式setData()方法的詳解以及陣列/json操作

一、setData()方法: 1、引數接受一個物件,以key,value的形式表示; 2、引數和變數名稱一致,可用一個值代替(es6新語法特性) 如上圖所示,在this.data中設定ceshi這條資料,在方法中,我們定義ceshi變數讓其等於that.data.ce

android native開發-native實現camera的操作

通過native實現camera的操作 原始碼路徑:frameworks/av/camera/ndk/ 參考的test原始碼路徑:cts/tests/tests/graphics/jni/CameraTestHelpers.cpp 1/* 2 * Copyrig

docker 基礎命令操作 映象以及容器的基本操作演示

tomcat啟動後’,可以通過頁面訪問到預設頁面,可以更加直觀的顯示出來;我們就以tomcat為例,對映象,容易的基礎操作進行演示; 1.查詢映象命令 docker search tomcat , 執行後,出現一個列表,表頭的相關資訊,看名字,可以很容易的理解,分別是

【Unity3D入門教程】Unity3D介面介紹及遊戲物件基本操作

1 介面介紹 在Windows等圖形化作業系統上,熟練地使用選單、圖示、快捷鍵等,將會極大提升工作效率。因此,要認識一個軟體,學會熟練使用他們,就必須先認識軟體的介面。 先點選選單欄的Window——

MySQL資料庫 || 資料庫和資料表的基本操作

第一篇博文,一個小小的紀念儀式^-^ 以下正文 一:資料庫的基本操作 --資料庫的操作 --連線資料庫 mysql -uroot -p密碼 mysql -uroot -pmysql --退出資料庫 exit quit ctrl + d --檢視所有資料庫

什麼是影象以及opencv的基本操作

影象就是由一系列畫素點構成的影象 拿灰度圖(二通道影象)來說,它在計算機中的儲存形式就是一個二維矩陣,構成影象上所有畫素點的資訊,它其實就是一系列亮度不同的點構成,每個畫素點的亮度由該畫素所儲存的值決定(0-255); 多通道影象(俗稱彩色影象)的

Nodejspostgresql基本操作的封裝

基於nodejs平臺對postgresql的增刪改查基本操作進行了封裝,能滿足基本的實際應用,比較複雜的SQL需另外實現。 PG.js檔案如下: var pg = require('pg'); var conString = "postgres://username:[e

MYSQL(資料庫概念,表的基本操作)

一、資料庫概念     資料庫(Database:DB):資料庫是按照資料結構啦組織、儲存和管理資料的倉庫--->資料庫其實就是磁碟中的檔案+管理系統     資料庫管理系統(Database Management System:DBMS)是專門用於管理資料庫的計算機

JNI學習(四)、本地方法建立java物件,以及字串的操作

一、本地方法建立Java物件 JNIEnv提供了下面的幾個方法來建立一個Java物件: jobject NewObject(jclass clazz, jmethodID methodID, ...) jobject NewObjectV(jclass clazz, j

Python 資料處理擴充套件包: pandas 模組的DataFrame介紹(建立和基本操作

DataFrame是Pandas中的一個表結構的資料結構,包括三部分資訊,表頭(列的名稱),表的內容(二維矩陣),索引(每行一個唯一的標記)。 一、DataFrame的建立 有多種方式可以建立DataFrame,下面舉例介紹。 例1: 通過list建立 >