ContentProvider列出联系人姓名,电话到ListActivity

来源:互联网 发布:gef软件下载 编辑:程序博客网 时间:2024/04/30 17:09

要注意的是联系人的姓名和电话号码不在同一个URI中。

姓名所在URI:  android.provider.ContactsContract.Contacts.CONTENT_URI
电话所在URI:android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI


public class ContactActivity extends ListActivity {    private ContentResolver resolver ;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        resolver = getContentResolver() ;            }    @Override    protected void onResume() {        super.onResume();        /* 1.URI         * 2.投影:数据库中其中的几个列(null查询全部的)         * 3.条件         * 4.参数         * 5.排序         */        //联系人的ID,联系人的姓名        String projection[]={Contacts._ID,Contacts.DISPLAY_NAME};        Cursor infoCursor = resolver.query(Contacts.CONTENT_URI, projection, null, null, null) ;        //电话的ID,电话对应的联系人ID,电话号码的具体内容        String [] column ={Phone._ID,Phone.CONTACT_ID,Phone.DATA} ;                final Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,                     column,null, null,null);                 @SuppressWarnings("deprecation")        CursorAdapter adapter = new CursorAdapter(this,infoCursor) {                        @Override            public View newView(Context context, Cursor cursor, ViewGroup parent) {                //导入自定义的XML文件                View view = getLayoutInflater().inflate(R.layout.contacts_item, null) ;                Holder holder = new Holder();                holder.idTv = (TextView) view.findViewById(R.id.id_tv) ;                holder.nameTv = (TextView) view.findViewById(R.id.name_tv) ;                holder.phoneTv = (TextView) view.findViewById(R.id.phone_tv) ;                view.setTag(holder);                 return view;            }                        @Override            public void bindView(View view, Context context, Cursor cursor) {                Holder holder = (Holder) view.getTag() ;                int contactId = cursor.getInt(0) ;                holder.idTv.setText(cursor.getString(0));                 holder.nameTv.setText(cursor.getString(1));                StringBuffer sb = new StringBuffer() ;                /*                 * 列出所有的电话号码,有的联系人有多个号码                 */                //有数据时一直是true,cursor第一次指向第一条数据之前,后面都是指向最后一条数据之后,执行moveToFirst都是true                if(phoneCursor.moveToFirst()){                    do{                        int pid = phoneCursor.getInt(1) ;                         //联系人ID等于电话号码对应的联系人ID                        if(pid == contactId){                            sb.append(phoneCursor.getString(2)).append(" ") ;                         }                    }while(phoneCursor.moveToNext());//移到最后时退出循环                }                                holder.phoneTv.setText(sb);             }        };        setListAdapter(adapter);     }    //内部类,所有的控件集合    class Holder {        TextView idTv ;        TextView nameTv ;        TextView phoneTv ;    }}


查看虚拟机的联系人:


C:\>adb shellcd /data/datacd com.android.providers.contactscd databasessqlite3 contact2.db.tables.headers on.mode columnselect * from data ;


原创粉丝点击