Android:使用ContentProvider读取、添加联系人

 1 package com.example.contentproviderdome1;
 2 
 3 import android.os.Bundle;
 4 import android.provider.ContactsContract;
 5 import android.provider.ContactsContract.CommonDataKinds.Email;
 6 import android.provider.ContactsContract.CommonDataKinds.Phone;
 7 import android.provider.ContactsContract.Contacts;
 8 import android.app.Activity;
 9 import android.content.ContentResolver;
10 import android.database.Cursor;
11 import android.util.Log;
12 import android.view.Menu;
13 
14 public class MainActivity extends Activity {
15 
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20         ContentResolver cr = this.getContentResolver();
21         Cursor c = cr.query(Contacts.CONTENT_URI, new String[]{Contacts._ID,Contacts.DISPLAY_NAME}, null, null, null);
22         if(c!=null){
23             while(c.moveToNext()) {
24                 int id = c.getInt(c.getColumnIndex("_id"));
25                 Log.i("info","id:"+id);
26                 Log.i("info", "name:"+c.getString(c.getColumnIndex(Contacts.DISPLAY_NAME)));
27                 Cursor c1 = cr.query(Phone.CONTENT_URI, new String[]{Phone.NUMBER,Phone.TYPE}, Phone.CONTACT_ID+"="+id, null, null);
28                 if(c1!=null) {
29                     while(c1.moveToNext()){
30                         int type = c1.getInt(c1.getColumnIndex(Phone.TYPE));
31                         if(type == Phone.TYPE_HOME){
32                             Log.i("info","家庭电话:"+c1.getString(c1.getColumnIndex(Phone.NUMBER)));
33                         }else if(type == Phone.TYPE_MOBILE){
34                             Log.i("info","移动电话:"+c1.getString(c1.getColumnIndex(Phone.NUMBER)));
35                         }
36                     }
37                     c1.close();
38                 }
39                 Cursor c2 = cr.query(Email.CONTENT_URI, new String[]{Email.ADDRESS}, Email.CONTACT_ID+"="+id, null, null);
40                 if(c2!=null){
41                     while(c2.moveToNext()){        
42                             Log.i("info", "个人邮箱:"+c2.getString(c2.getColumnIndex(Email.ADDRESS)));
43                         }        
44                     c2.close();
45                 }
46             }
47             c.close();
48         }
49     }
50 }

上面的是读取。读取电子邮件也可用Email.DATA代替Email.ADDRESS,添加TPYE实现分类。

最后不要忘了在Manifest文件中添加权限!

下面的是插入。

 1 package com.example.contentproviderdome2;
 2 
 3 import android.app.Activity;
 4 import android.content.ContentResolver;
 5 import android.content.ContentUris;
 6 import android.content.ContentValues;
 7 import android.net.Uri;
 8 import android.os.Bundle;
 9 import android.provider.ContactsContract.CommonDataKinds.Phone;
10 import android.provider.ContactsContract.CommonDataKinds.StructuredName;
11 import android.provider.ContactsContract.RawContacts;
12 import android.provider.ContactsContract.Data;
13 import android.util.Log;
14 
15 public class MainActivity extends Activity {
16 
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21         ContentResolver cr = getContentResolver();
22         ContentValues values = new ContentValues();
23         //插入一条数据
24         Uri uri = cr.insert(RawContacts.CONTENT_URI, values);
25         Long raw_contact_id = ContentUris.parseId(uri);
26         values.clear();
27         //插入人名
28         values.put(StructuredName.CONTACT_ID, raw_contact_id);    
29         values.put(StructuredName.DISPLAY_NAME, "abc");    
30         Log.i("info",""+raw_contact_id);
31         values.put(StructuredName.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
32         Log.i("info",""+raw_contact_id);
33         uri = cr.insert(Data.CONTENT_URI, values);
34         Log.i("info",""+raw_contact_id);
35         values.clear();
36         //插入电话
37         values.put(Phone.CONTACT_ID, raw_contact_id);
38         values.put(Phone.NUMBER, "1388888888");
39         values.put(Phone.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
40         uri = cr.insert(Data.CONTENT_URI, values);
41         values.clear();
42     }
43 }

程序崩溃。前两个Log可以打印,但是第三个不行。错误日志显示空指针。一共有5个Data类,只有1个有CONTENT_URI,跟教程中的源码对照没发现区别,权限也加了,不知道为什么。

 

posted @ 2014-12-17 12:11  青柘白芽  阅读(197)  评论(0编辑  收藏  举报